R:分别将函数应用于两个变量的每个元素

ada*_*888 7 r apply mapply multiple-arguments

我有一个带有两个变量x和y的函数:

fun1 <- function(x,y) {
  z <- x+y
  return(z)
}
Run Code Online (Sandbox Code Playgroud)

该功能本身可以正常工作:

fun1(15,20)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用带有两个x和y向量的应用函数时,我没有得到正确的56*121数组

Lx  <- c(1:56)
Ly <- c(1:121)

mapply(fun1, Lx, Ly)
Run Code Online (Sandbox Code Playgroud)

我将非常感谢您的帮助以及有关最快解决方案的建议(例如,data.table或dplyr解决方案比应用更快).

Hub*_*rtL 8

如果要使用mapply()它,则必须为其提供n个具有相同大小的参数列表,这些参数将通过n传递给函数n,如下所示:

mapply(fun1,c(1,2,3), c(4, 5, 6))
[1] 5 7 9
Run Code Online (Sandbox Code Playgroud)

或一个参数可以是标量,例如:

mapply(fun1,c(1,2,3), 4)
[1] 5 6 7
Run Code Online (Sandbox Code Playgroud)

既然你要使用的所有组合LxLy,你可以遍历一个列表,然后遍历其他,如:

sapply(Lx, function(x) mapply(fun1,x,Ly))
Run Code Online (Sandbox Code Playgroud)

要么

sapply(Ly, function(y) mapply(fun1,Lx,y))
Run Code Online (Sandbox Code Playgroud)

产生与rawr 命题相同的结果

outer(Lx, Ly, fun1)
Run Code Online (Sandbox Code Playgroud)

哪里outer()更快