【问题标题】:Sequential iteration over multiple inputs多个输入的顺序迭代
【发布时间】:2017-05-24 07:06:46
【问题描述】:

这看起来应该很简单。我有 2 个列表,一个包含 3 个实验的列表和每个实验中的 3 个重复。我想做的是一口气读完所有 9 个副本:

library(purrr)
x = list("exp1", "exp2", "exp3")
y = list("rep1", "rep2", "rep3")

使用map() 例如:

map(x, function(x){paste(x, map(y, paste0))})

但是,如果我尝试map2(x, y, paste),我只会得到两个输入的 3 次并行迭代。

有没有简单的方法在一个map2 调用中而不是嵌套映射迭代?谢谢。

【问题讨论】:

  • 使用dplyr,您可以在一个虚拟列上进行内部连接,然后paste 结果。同样使用来自data.tableCJ(交叉连接)。
  • 这种方式可以满足您的需求map2(x,y,~paste(x,y)),但是绑定是按行发生的,而不是查找每个 x 的 y 的所有组合。
  • 对不起@timfaber,但这只是重复了我的map2(x, y, paste) 调用三次。
  • 对了,你的嵌套调用可以写成map(x, ~paste(.x, map(y, paste0)))
  • 在基础 R 中,您可以像这样使用 outer 来返回粘贴在一起的所有对的向量:c(outer(x, y, FUN=paste))

标签: r purrr


【解决方案1】:

您必须明确生成不同的组合,例如使用expand.grid

expand.grid(x = x, y = y) %>% { map2(.$x, .$y, paste) }

【讨论】:

  • 比嵌套地图调用更好,我同意。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 2012-12-28
  • 2011-02-11
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多