【问题标题】:R mapply two lists element wiseR映射两个列表元素明智
【发布时间】:2016-04-27 23:33:19
【问题描述】:

我有 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 的相应元素,例如从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"))

【问题讨论】:

  • 谢谢!不知道Map。实际上,我还想计算获得的unique 元素的length。现在,我可以在Map 获得的输出上使用lengthunique 单独执行lapply,但有没有办法与Map 结合使用,因为这样会更快?
  • 您需要在问题中提及这一点
  • 更新了问题。

标签: r list apply


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2017-04-16
      相关资源
      最近更新 更多