Применить функцию к парным комбинациям аргументов - PullRequest
0 голосов
/ 01 декабря 2018

Я не так хорошо знаком с R, поэтому на этот вопрос, возможно, уже был дан ответ, но я просто, вероятно, не мог понять ответ, поэтому любые ссылки на другие темы будут полезны.

Я ищуспособ в основном сделать эквивалент R программы c

for(int i = 0; i < 12; i++){
    for(int j = 0; j < 9; j++){
        arr[i][j] = func(i+1,j+1);
    }
}

Я пытался

x <- mapply(func, 1:12, 1:9)

, но он только проходит (1,1), (2,2), (3, 3) ... в func.Как я могу передать все попарные комбинации векторов 1:12 и 1: 9 в func?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018
sapply(data.frame(t(expand.grid(1:12, 1:9))), function(v) func(v[1], v[2]))

expand.grid создает все комбинации в виде строк фрейма данных.t транспонирует результат, и я воспринимаю его как data.frame (t возвращает раздражающую матрицу ... даже при применении к data.frame s ...) и sapply поверх нее.Поскольку sapply обрабатывает фреймы данных как список значений столбцов, я получаю по столбцам (на самом деле по строкам - после применения t transpose ...) список содержимого фрейма данных.Эти фактические векторы строк берутся из функции, и получается функция func, примененная к двум значениям.Итак, в конце мы взяли все возможные попарные комбинации и вошли в функцию (v) ...

0 голосов
/ 01 декабря 2018

Работает ли это: outer(1:12, 1:9, func)?

Если нет, используйте matrix(apply(expand.grid(1:12, 1:9), 1, func), 12, 9).

Фон: "dims [product xx] не соответствуют длине объекта [xx] "ошибка в использовании функции R` external`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...