В R, как я могу получить все возможные комбинации значений некоторых векторов? - PullRequest
9 голосов
/ 26 октября 2011

Фон: у меня есть функция, которая принимает некоторые параметры. Я хочу получить результат функции для всех возможных комбинаций параметров.

Упрощенный пример:

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, и функция будет требовать, чтобы он был передан ему как числовой. Поэтому, пожалуйста, не используйте решения, основанные на факторных уровнях, если они не могут быть использованы для работы с целыми числами.

1 Ответ

23 голосов
/ 26 октября 2011

Я думаю, вы просто хотите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...