如何在data.table中修改list(或vector)类型的变量?

如何在data.table中修改list(或vector)类型的变量?,r,data.table,R,Data.table,在下面的示例中,我需要将一个列表分配给data.table的变量code,以便将值list(11,22)分配给dt$code。我该怎么做 dt <- data.table(1:3) dt$code <- list() dt[V1==2, code:=list(11,22)] # does not work dt[V1==2, code:=.(list(11,22))] # does not work 这也可以写成 dt[V1==2, code:=.(.(.(11,22)))]

在下面的示例中,我需要将一个列表分配给
data.table
的变量
code
,以便将值
list(11,22)
分配给
dt$code
。我该怎么做

dt <- data.table(1:3)
dt$code <- list()
dt[V1==2, code:=list(11,22)] # does not work
dt[V1==2, code:=.(list(11,22))] # does not work
这也可以写成

dt[V1==2, code:=.(.(.(11,22)))]  
这实际上是同义词

dt[V1==2, code:=.(.(c(11,22)))]  
但是请注意,在这种情况下,分配给变量
code
的是向量,而不是列表,用于
V1==2

还请注意,目前尚无法执行以下任一操作:

dt[all(code==c(11,22))] 
dt[, ifelse(all(code==c(11,22)), T, F)] 
这相当程度上否定了将向量用作data.table变量类型的价值

附加说明-根据马特在下面的评论


data.table的新开发版本将使这个问题过时。从1.12.3版本开始,可以编写任何一种方式,包括
dt[V1==2,code:=list(11,22)]

dt[V1==2,code:=list(list(11,12)))]
。@davide的可能副本您应该使用标记功能来标记副本。dev 1.12.3最近改进了可能的副本。请参阅新闻项目4:@Matt,您是否计划添加功能来比较列表变量,以便我们可以执行此操作:
dt[code==list(list(list(11,22)))]
?(这将大大提高
data.table
中列表的使用率)谢谢@Matt。1.12.3将使该问题过时。从上面的链接粘贴:
>DT[2,B:=字母[9:13]]#是错误的,现在works>DT[2,B:=(字母[9:13])#是错误的,现在works>DT[2,B:=(列表(字母[9:13])]#(列表())是必需的,仍然有效
。然而,是否有可能做到这一点:
DT[B==字母[9:13]]
DT[B==字母[9:13]]
在技术上可以作为向量扫描,但您真的确定多列键(或索引)并不更合适吗;e、 g.
setkey(DT、id1、id2、id3、id4、id5);DT[作为列表(字母[9:13)]
dt[V1==2, code:=.(.(c(11,22)))]  
dt[all(code==c(11,22))] 
dt[, ifelse(all(code==c(11,22)), T, F)]