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?
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:
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?
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:
Diusulkan: