【问题标题】:How to modify variable of type list (or vector) in data.table?如何修改 data.table 中列表(或向量)类型的变量?
【发布时间】:2019-05-07 14:41:45
【问题描述】:

在下面的示例中,我需要将列表分配给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:=list(list((list(11,22)))]   # works !

【问题讨论】:

标签: r data.table


【解决方案1】:
dt[V1==2, code:=list(list(list(11,22)))]  # works !

这也可以写成

dt[V1==2, code:=.(.(.(11,22)))]  

实际上是

的同义词
dt[V1==2, code:=.(.(c(11,22)))]  

但是请注意,在这种情况下,它是一个向量,而不是列表,它被分配给变量 code for V1==2

另请注意,(目前)不可能执行以下任何一项:

dt[all(code==c(11,22))] 
dt[, ifelse(all(code==c(11,22)), T, F)] 

这完全否定了使用向量作为 data.table 的变量类型的价值。

PS。添加 - 根据下面的马特评论

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

【讨论】:

  • 最近在 dev 1.12.3 中对此进行了改进。见新闻4:github.com/Rdatatable/data.table/blob/master/NEWS.md
  • @Matt,您是否打算添加比较列表变量的功能,以便我们可以这样做:dt[code==list(list(list(11,22)))]? (这将真正促进data.table 中列表的使用)
  • 谢谢@Matt。 1.12.3 将使这个问题过时。从上面的链接粘贴:&gt; DT[2, B:=letters[9:13]] # was error, now works &gt; DT[2, B:=.(letters[9:13])] # was error, now works &gt; DT[2, B:=.(list(letters[9:13]))] # .(list()) was needed, still works。但是可以这样做:DT[B==letters[9:13]] 吗?
  • DT[B==letters[9:13]] 在技术上可以作为矢量扫描,但您确定多列键(或索引)不合适吗?例如setkey(DT, id1, id2, id3, id4, id5); DT[as.list(letters[9:13)]] ?
猜你喜欢
  • 2021-02-23
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2013-04-15
  • 2017-07-26
  • 1970-01-01
相关资源
最近更新 更多