Использование 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

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

Другие вопросы по тегам