【发布时间】: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.table的CJ(交叉连接)。 -
这种方式可以满足您的需求
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))。