r - 如何使用 mapply 复制嵌套 for 循环?

标签 r list for-loop mapply

我想在 R 中向量化列表的创建,但只能通过嵌套 for 循环获得我想要的内容。为了重现性,我提供了问题的一个大大简化的版本。有人可以帮我修改或替换我的 mapply 函数吗?

所需功能:

my_list <- list()
A <- c("one", "two", "three", "four")
B <- c("left", "right")
for (a in A) {
    for (b in B) {
        my_list <- c(my_list, paste(a, b))
    }
}
print(my_list)

输出(为简洁起见编辑空白):

[[1]] [1] "one left"
[[2]] [1] "one right"
[[3]] [1] "two left"
[[4]] [1] "two right"
[[5]] [1] "three left"
[[6]] [1] "three right"
[[7]] [1] "four left"
[[8]] [1] "four right"

我尝试对此进行矢量化:

combinate <- function(a, b) {
    return(paste(a, b))
}
mapply(combinate, a=A, b=B, SIMPLIFY=FALSE)

输出:

$one   [1] "one left"
$two   [1] "two right"
$three [1] "three left"
$four  [1] "four right"

我不关心标签;我担心通过循环两个列表来获取所有八个结果。我发现文档表明,mapply 正在通过配对两个列表中的第一个项目,然后配对两个列表中的第二个项目,等等,重复较短的列表来完成它应该做的事情。但经过多次搜索,我找不到必须存在的东西,即一种像嵌套 for 循环一样将所有列表项组合配对的方法。

最佳答案

我们可以使用expand.gridpaste

v1 <- do.call(paste, expand.grid(A, B))

或与外部

v1 <- c(outer(A, B, paste))

如果这些需要位于列表

as.list(v1)

检查OP的输出

identical(as.list( c(t(outer(A, B, paste)))), my_list)
#[1] TRUE

关于r - 如何使用 mapply 复制嵌套 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46714378/

相关文章:

Python 对值进行排序并根据唯一键对它们进行分组

java - 就阴影而言,Java 中的 for each 和传统 for 循环有什么区别?

java - 比较列表列表中的一个元素

java - 尝试创建回文...如何比较 "output.charAt(k)"与原始 "output"字符串?

从 R 调用 MPI 以运行 C 代码

r - MongoDB 中的查询

r - 合并命名向量列表而不破坏名称

java - 按特定值分组列出数据

r - dplyr semi_join 错误 : `x` and `y` must share the same src, 设置 `copy` = TRUE(可能很慢)

java - 有些元素多次处理,有些则根本不处理