Использование mapply для функции с несколькими аргументами, не дающей ожидаемого результата
Я хотел бы использовать sapply или mapply для выполнения нижеприведенной функции над числами от 3:5 и 9:10. Короче я бы хотел сделать следующее
3^2 + 9 = 18
4^2 + 9 = 25
5^2 + 9 = 34
3^2 + 10 = 19
4^2 + 10 = 26
5^2 + 10 = 35
Тем не менее, я хотел бы указать оба значения, то есть 3:5 и 9:10 в качестве аргументов. Я могу использовать sapply, когда функция ожидает только один аргумент, а также могу использовать mapply, когда функция ожидает два аргумента, второй из которых не является списком элементов. Как я могу выполнить то же самое с двумя аргументами, оба из которых являются списками?
> mapply(myfunc,3:5,9)
[1] 18 25 34
> mapply(myfunc,3:5,9:10)
[1] 18 26 34
Warning message:
In mapply(myfunc, 3:5, 9:10) :
longer argument not a multiple of length of shorter
1 ответ
Для вашего примера вы можете использовать функцию outer
:
> outer(3:5, 9:10, function(x, y) { x^2 + y })
[,1] [,2]
[1,] 18 19
[2,] 25 26
[3,] 34 35
Но помните, что прикладная функция должна быть векторизованной.