【发布时间】:2016-03-09 11:12:03
【问题描述】:
考虑这个接收 3 个参数的玩具函数:
toy <- function(x, y, z){
paste(x, y, z)
}
对于每个参数,我有多个值(每个参数不一定有相同的数字),我想将 toy 函数应用于这些参数的不同组合。
所以我想,好吧,让我们使用apply函数mapply的多元版本。
mapply(FUN = toy, x = 1:2, y = c("#", "$"), z = c("a", "b"))
[1] "1 # a" "2 $ b"
但这并不是我想要的。事实上,根据帮助mapply“将 FUN 应用于每个 ... 参数的第一个元素、第二个元素、第三个元素等等。”。而我想要的是将 FUN 应用于所有参数的所有不同组合。
所以,而不是
[1] "1 # a" "2 $ b"
我想要的结果是:
[1] "1 # a" "1 # b" "1 $ a" "1 $ b" "2 # a" "2 # b" "2 $ a" "2 $ b"
那么,我的问题是这样做的聪明方法是什么?
当然,我可以事先准备好组合并安排mapply 的参数,以便它们包含-rowwise- 所有组合。但我只是认为这可能是一项相当常见的任务,并且可能已经有一个函数,在 apply-family 中,可以做到这一点。
【问题讨论】:
-
你可以做
do.call(paste, expand.grid(x = 1:2, y = c("#", "$"), z = c("a", "b")))也许