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]]]))
我有 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]]]))