在R中,如何获得某些向量值的所有可能组合?

时间:2011-10-26 16:03:30

标签: r combinatorics

背景:我有一个带一些参数的函数。我想为所有可能的参数组合提供函数的结果。

简化示例:

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"

我的想法是创建一个包含colorday列的矩阵,使用现有的向量colorsdays填充它,为结果初始化一个空列,然后使用循环为每个矩阵行调用f一次,并将结果写入最后一列。但我不知道如何从colorsdays向量轻松生成矩阵。我尝试搜索它,但我得到的所有结果都是combn函数,它做了不同的事情。

在这种简化的情况下,colorsdays是因素,但在我的实例中,情况并非如此。函数的一些参数是整数,所以我的实数向量可能看起来更像1, 2, 3,函数将要求它作为数字传递给它。所以请不要依赖于因子级别的解决方案,如果它们不能以某种方式用于处理整数。

1 个答案:

答案 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