2
我想矢量化在R中创建一个列表,但只能得到我想要的嵌套for循环。我已经包含了我的问题重现性的大大简化版本。有人可以帮我修改或替换我的mapply功能吗?如何复制一个嵌套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循环一样组合地对所有列表项进行配对。
我学习困难的方式检查,虽然这些做什么我问过的问题,他们不发挥作用不太一样了-循环。粘贴功能没有被调用8次,每次都有不同的变量,但传递了两个列表或8个项目的数组。外部函数期望粘贴函数(或您提供的任何自定义函数)可以正确处理。或者如果我仍然误解,请纠正我。 :) – mightypile
@mightypile在'outer'中,'FUN'参数是'paste'。 “外层”做的是获得每个向量元素的组合,并通过指定“粘贴”为“FUN”,它正在粘贴 – akrun