我有两个标量值的x_i
函数y_j
。我有一个包含 n 个x_i
值、X 和 n 个y_j
值的向量,例如
myfunction <- function(x,y) min(x,y)
X <- 1:3
Y <- 2:4
我想用 $n$ 填充 $n$ 矩阵,其元素(i,j)
由myfunction(x_i, y_j)
. 有很多方法可以做到这一点R
,我很好奇它们的相对表现。
例如,这似乎是 的任务outer
,但它似乎会混淆是否将向量或标量传递给myfunction
。首先考虑:
r
outer(X, Y, paste)
给我每一对
[,1] [,2] [,3]
[1,] "1 2" "1 3" "1 4"
[2,] "2 2" "2 3" "2 4"
[3,] "3 2" "3 3" "3 4"
看起来挺好的。但
outer(X, Y, myfunction)
抛出错误:
Error: dims [product 9] do not match the length of object [1]
同时,其他可能的函数似乎与我对标量的预期一样,例如:
myfunction <- function(x,y) exp((x-y)^2)
效果很好
outer(X, Y, myfunction)
[,1] [,2] [,3]
[1,] 2.718282 54.598150 8103.083928
[2,] 1.000000 2.718282 54.598150
[3,] 2.718282 1.000000 2.718282
在一些快速的数值实验中,这似乎比 略快expand.grid
,并且函数调用更紧凑,但我似乎不明白为什么有些函数看起来像我预期的那样工作,而另一些则没有。
经典expand.grid
解决方案还要求函数使用向量参数,这对于我的示例来说意味着非常不同的事情min
; 同一问题的不同版本。有没有办法强制我的函数的参数必须是标量而不是向量这一事实?