引用r data.table';中的嵌套列表元素:=';(参考转让)

引用r data.table';中的嵌套列表元素:=';(参考转让),r,data.table,R,Data.table,作为计算新data.table列的一部分,我希望访问嵌套列表中存储的对象,并且指向该对象的列表索引保存在其他data.table列中。下面是一个简单的例子: library(data.table) list.test <- list("A" = list("AA" = 1, "BB" = 2), "B" = list("AA" = 3, "BB" = 4)) dt.t

作为计算新data.table列的一部分,我希望访问嵌套列表中存储的对象,并且指向该对象的列表索引保存在其他data.table列中。下面是一个简单的例子:

library(data.table)

list.test <- list("A" = list("AA" = 1, "BB" = 2), "B" = list("AA" = 3, "BB" = 4))

dt.test <- data.table(
  first.idx = rep(c("A", "B"), each=2),
  second.idx = rep(c("AA", "BB"), times = 2)
)

dt.test[ , result := list.test[[first.idx]][[second.idx]] ]
所需输出为:

   first.idx second.idx result
1:         A         AA      1 
2:         A         BB      2
3:         B         AA      3
4:         B         BB      4

无法以这种方式对嵌套列表中的索引进行矢量化(您尝试调用
list.test[[c(“a”、“a”、“B”、“B”)]][[c(“AA”、“BB”、“AA”、“BB”)]]
)。相反,您可以使用每一行的单独分组逐行执行索引(即
列表。测试[[“A”][[“AA”]]]]
等):

dt.test[,result:=list.test[[c(first.idx,second.idx)],by=1:nrow(dt.test)]
dt试验
#>first.idx second.idx结果
#>1:AA1
#>2:A BB 2
#>3:B AA 3
#>4:B BB 4
   first.idx second.idx result
1:         A         AA      1 
2:         A         BB      2
3:         B         AA      3
4:         B         BB      4