我想使用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
答案 0 :(得分:1)
对于您的示例,您可以使用函数outer
:
> outer(3:5, 9:10, function(x, y) { x^2 + y })
[,1] [,2]
[1,] 18 19
[2,] 25 26
[3,] 34 35
但请注意,应用的函数必须进行矢量化。