R data.table指定单行列表类型列

R data.table指定单行列表类型列,r,data.table,R,Data.table,我发现数据的逻辑。对于以下两个操作,表不一致: 行动1: df1<-data.table(a=c(1,2)) list1<-list(c(1,2), 1) df1[,b:=list1] #> df1 # a b #1: 1 1,2 #2: 2 1 我可以做些什么来统一这两种情况: df1[, b:=list(list1)] df2[, b:=list(list2)] 这是最好的解决方案吗?data.table是否没有不取消单例列表的选项?在第一种情况下,当我使

我发现
数据的逻辑。对于以下两个操作,表
不一致:

行动1:

df1<-data.table(a=c(1,2))
list1<-list(c(1,2), 1)
df1[,b:=list1]

#> df1
#   a   b
#1: 1 1,2
#2: 2   1
我可以做些什么来统一这两种情况:

df1[, b:=list(list1)]
df2[, b:=list(list2)]
这是最好的解决方案吗?data.table是否没有不取消单例列表的选项?在第一种情况下,当我使用
b:=list(list1)
时,是否没有额外的操作性能方面的问题?


我不能建议重复,因为“这个问题没有经过投票或接受的答案 “


这是一个很好的问题,涉及到关于
:=
操作符的设计决策

对于使用
:=
作为运算符的简单调用,如
col:=val
,我们决定自动将
val
包装到列表中。做出此决定是为了让用户更方便地分配单个列

当您使用函数调用表单时,
”:=“(col=val)
我们不再将
val
包装到列表中。它已经是扩展形式了<代码>:=
作为
列表的别名,但会就地更新。通过将
:=
更改为
列表
(或
)如
(col=val)
,您始终可以检查将要更新的列


并不是说,即使使用
:=
作为运算符,您仍然必须提供RHS作为创建2+列的列表,
c(“col1”,“col2”):=list(val1,val2)

相关:。谢谢,这回答了我关于如何统一案例的问题(使用函数形式“:=”)。当我们有
col:=val
时,说您自动换行到列表并不能解释我的示例:如果val还不是列表,也许您可以将其添加到文档中。
#   a   b
#1: 1 1,2
df1[, b:=list(list1)]
df2[, b:=list(list2)]