【问题标题】:purrr equivalent of lapply to return multi-element list?purrr 相当于 lapply 返回多元素列表?
【发布时间】:2018-12-20 05:35:11
【问题描述】:

我有一群人,他们具有关于他们是否活着、他们的性别和年龄的属性:

ind <- vector(mode="list", 10)
  for(i in seq(ind)){
    ind[[i]]$alive <- 1 
    ind[[i]]$sex <- sample(c("female","male"),1) 
    ind[[i]]$age <- round(runif(1, min=1, max=10))
  }
ind

使用 lapply,我可以增加每个人的年龄,并获取个人列表及其所有属性:

lapply(ind,function(x){x$age <- x$age+1; x})

是否有来自 purrr 的 map 函数可以做同样的事情(提供与 lapply 相同的输出)?当我使用 map() 时,我只返回一个年龄列表,而不是每个人的所有属性:

map(ind, ~.$age+1)

【问题讨论】:

  • 这可能不是最干净的方式,但您在lapply 中使用的逻辑同样适用于map - map(ind, ~{.$age &lt;- .$age+1; .})

标签: r purrr


【解决方案1】:

阅读帮助文件后,看起来?update_list 就是你想要的:

map(ind, update_list, age = ~age + 1)

因此将update_list函数应用于ind的每一项,并将age变量替换为表达式age + 1的结果。

【讨论】:

  • 关于如何使这个条件成为条件的任何想法?不在我最初的问题中,但我想知道如何将其更改为仅将老化应用于男性(这不现实,只是想知道如何在这里也包含条件......)
  • @jason - 可能是 replace - age = ~replace(age, age=="Male", age[age=="Male"] + 1)(未经测试的代码)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多