Data.table: Haruskah rbindlist(..., fill=TRUE) mengembalikan NA_logical_ dalam kolom daftar?

Dibuat pada 25 Jan 2020  ·  6Komentar  ·  Sumber: Rdatatable/data.table

Dari #4196:

Saat mengisi kolom daftar, rbindlist berangkat dari perilaku semua tipe kolom lainnya, dan mengembalikan elemen NULL alih-alih NA:

> A = data.table(c1=0, c2=list(1:3))
> B = data.table(c1=1)
> rbind(A,B,fill=TRUE)
      c1     c2
   <num> <list>
1:     0  1,2,3
2:     1   

Diharapkan:

> A = data.table(c1=0, c2=list(1:3))
> B = data.table(c1=1)
> rbind(A,B,fill=TRUE)
      c1     c2
   <num> <list>
1:     0  1,2,3
2:     1  NA   

Haruskah kita mengubah perilaku ini untuk kolom daftar untuk mengisi baris dengan nilai NA agar sesuai dengan perilaku fill=TRUE untuk jenis kolom lainnya?

non-atomic column question

Komentar yang paling membantu

Bagaimana jika kita hanya menambahkan kalimat ke dokumentasi yang mencatat perilaku dalam kasus kolom daftar yang hilang:

Entri saat ini untuk argumen isian:

TRUE mengisi kolom yang hilang dengan NA. Secara default SALAH. Ketika TRUE, use.names diatur ke TRUE.

Diusulkan:

TRUE mengisi kolom yang hilang dengan NAS, atau NULL untuk kolom daftar yang hilang. Secara default SALAH. Ketika TRUE, use.names diatur ke TRUE.

Semua 6 komentar

PR dengan perbaikan disediakan jika kita ingin melakukan perubahan

Perilaku saat ini tampaknya baik-baik saja bagi saya.

> str(as.integer(NULL)[1L])
 int NA
> str(as.list(NULL)[1L])
List of 1
 $ : NULL

IMO seharusnya tidak NA karena:

  • itu mengubah tipe dari bidang yang hilang (tidak terdefinisi) menjadi vektor logis
  • itu mengubah panjang dari 0 panjang menjadi panjang 1

Saya condong ke arah Jan's point. Perilaku elemen kosong saat ini sebenarnya adalah cara daftar untuk mewakili yang hilang (tidak ada objek untuk ditunjuk). Kita dapat membuat contoh di mana setiap item dari daftar adalah vektor logis, setiap item merupakan hasil dari beberapa perhitungan. Dalam kasus seperti itu, 3 status berbeda mungkin perlu direpresentasikan: panjang 0 logis, panjang 1 logis NA, dan komputasi yang hilang. Jika panjang 1 logika NA digunakan untuk hilang, 2 itu tidak dapat dibedakan.

Apakah mengubah metode cetak sudah cukup? Alih-alih tidak ada yang dicetak, bagaimana dengan NULL ? Mencetak NA sekali lagi dapat menyiratkan panjang 1 NA logis, sedangkan NULL tidak akan ambigu, konsisten dengan basis R yang dicetak untuk item daftar kosong, dan akan memberikan pengingat visual lebih lanjut bahwa itu adalah daftar kolom.

juga setuju w Jan, khususnya tentang panjang 0 --> panjang 1.

Saya menggunakan panjang(x)>0 banyak untuk memfilter baris dengan kolom daftar kosong.

kita bisa menebak menempatkan logical() di sana sebagai gantinya, apakah ada keuntungan dari logical() dibandingkan NULL?

Bagaimana jika kita hanya menambahkan kalimat ke dokumentasi yang mencatat perilaku dalam kasus kolom daftar yang hilang:

Entri saat ini untuk argumen isian:

TRUE mengisi kolom yang hilang dengan NA. Secara default SALAH. Ketika TRUE, use.names diatur ke TRUE.

Diusulkan:

TRUE mengisi kolom yang hilang dengan NAS, atau NULL untuk kolom daftar yang hilang. Secara default SALAH. Ketika TRUE, use.names diatur ke TRUE.

Perubahan doc terlihat bagus. Ditambah perubahan metode cetak yang saya sarankan juga?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

franknarf1 picture franknarf1  ·  3Komentar

arunsrinivasan picture arunsrinivasan  ·  3Komentar

alex46015 picture alex46015  ·  3Komentar

sengoku93 picture sengoku93  ·  3Komentar

nachti picture nachti  ·  3Komentar