来自#4196:
填充列表列时,rbindlist 与所有其他列类型的行为不同,并返回 NULL 元素而不是 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
预期的:
> 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
我们是否应该更改列表列的此行为以使用 NA 值填充行以匹配其他列类型的 fill=TRUE 行为?
如果我们想进行更改,则提供带有修复的 PR
目前的行为对我来说似乎很好。
> str(as.integer(NULL)[1L])
int NA
> str(as.list(NULL)[1L])
List of 1
$ : NULL
IMO 不应该是 NA,因为:
我倾向于简的观点。 空元素的当前行为实际上是列表表示缺失的方式(没有任何对象指向)。 我们可以构建一个例子,其中列表的每一项都是一个逻辑向量,每一项都是一些计算的结果。 在这种情况下,可能需要表示 3 种不同的状态:长度 0 逻辑、长度 1 NA 逻辑和缺失计算。 如果长度 1 NA 逻辑用于丢失,则无法区分这 2 个。
改变打印方法就足够了吗? 而不是什么都不打印, NULL
怎么样? 打印NA
可能再次暗示长度为 1 NA 的逻辑,而NULL
将是明确的,与基础 R 为空列表项打印的内容一致,并且会给出进一步的视觉提醒,即它是一个列表柱子。
也同意 w Jan,特别是关于长度 0 --> 长度 1。
我经常使用 lengths(x)>0 来按空列表列过滤行。
我们可以猜想把logical() 放在那里,但是logical() 比NULL 有什么优势吗?
如果我们只是在文档中添加一个句子,说明在缺少列表列的情况下的行为会怎样:
fill 参数的当前条目:
TRUE 用 NA 填充缺失的列。 默认为假。 当为 TRUE 时,use.names 设置为 TRUE。
建议的:
TRUE 用 NA 填充缺失的列,或 NULL 用于缺失的列表列。 默认为假。 当为 TRUE 时,use.names 设置为 TRUE。
文档更改看起来不错。 加上我建议的打印方法更改?
最有用的评论
如果我们只是在文档中添加一个句子,说明在缺少列表列的情况下的行为会怎样:
fill 参数的当前条目:
建议的: