R mapply 两个列表元素明智

R mapply two lists element wise

我有 2 个列表。一个列表提供如下索引:

dd[1:3]
[[1]]
[1]  2  5  6  7  9 14 16

[[2]]
[1] 5

[[3]]
integer(0)

第二个列表包含的字符串为:

ee[1:3]
[[1]]
 [1] "HP"     "A"   "HP"     "HP"    
 [5] "BD"  "A"   "A"   "NY"
 [9] "U"          "HP"     "HP"     "HP"    
[13] "HP"     "S"        "HP"     ""       
[17] "0"            

[[2]]
[1] "HP"  "HP"  "HP"  "HP"  "T"
[6] "HP"  "HP"  "0"         

[[3]]
[1] "HP" "HP" "0"

我想将列表 dd 中的索引应用于 ee 的相应元素,例如select 来自 ee[[1]][1] 的 2、5、6、7、9、14、16 个元素,然后计算唯一元素的长度。由于列表很大,我想以矢量化的方式进行。

我知道这是 mapply 的一个简单应用,我遗漏了一些明显的东西。任何帮助是极大的赞赏。谢谢!

数据

dd <- list(c(2,  5,  6,  7,  9, 14, 16), 5, integer(0))
ee <- list(c("HP", "A", "HP", "HP", "BD", "A", "A", "NY", "U", "HP", 
             "HP", "HP", "HP", "S", "HP", "", "0"),
           c("HP", "HP", "HP", "HP", "T", "HP", "HP", "0"), c("HP", "HP", "0"))

您可以使用 mapply 以这种方式执行此操作:

mapply(function(x,y){
     table(x[y])
  },ee,dd)

另一种选择是使用 lapply 循环一个 list 的序列,基于另一个的索引进行子集并获得元素的频率

lapply(seq_along(ee), function(i) table(ee[[i]][dd[[i]]]))