如何在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)]