背景:我有一个带一些参数的函数。我想为所有可能的参数组合提供函数的结果。
简化示例:
f <- function(x, y) { return paste(x, y, sep=",")}
colors = c("red", "green", "blue")
days = c("Monday", "Tuesday")
我希望我的结果看起来像
color day f
[1,] "red" "Monday" "red,Monday"
[2,] "red" "Tuesday" "red,Tuesday"
[3,] "green" "Monday" "green,Monday"
[4,] "green" "Tuesday" "green,Tuesday"
[5,] "blue" "Monday" "blue,Monday"
[6,] "blue" "Tuesday" "blue,Tuesday"
我的想法是创建一个包含color
和day
列的矩阵,使用现有的向量colors
和days
填充它,为结果初始化一个空列,然后使用循环为每个矩阵行调用f一次,并将结果写入最后一列。但我不知道如何从colors
和days
向量轻松生成矩阵。我尝试搜索它,但我得到的所有结果都是combn
函数,它做了不同的事情。
在这种简化的情况下,colors
和days
是因素,但在我的实例中,情况并非如此。函数的一些参数是整数,所以我的实数向量可能看起来更像1, 2, 3
,函数将要求它作为数字传递给它。所以请不要依赖于因子级别的解决方案,如果它们不能以某种方式用于处理整数。
答案 0 :(得分:23)
我想你只想要expand.grid
:
> colors = c("red", "green", "blue")
> days = c("Monday", "Tuesday")
> expand.grid(colors,days)
Var1 Var2
1 red Monday
2 green Monday
3 blue Monday
4 red Tuesday
5 green Tuesday
6 blue Tuesday
并且,如果要在同一行中指定列名:
> expand.grid(color = colors, day = days)
color day
1 red Monday
2 green Monday
3 blue Monday
4 red Tuesday
5 green Tuesday
6 blue Tuesday