对参数的成对组合应用函数

Apply a function over pairwise combinations of arguments

我对 R 不是很熟悉,所以这个问题可能已经得到解答,但我可能无法理解答案,所以任何指向其他主题的链接都会有所帮助。

我正在寻找一种方法来基本上执行与 C 程序等效的 R

for(int i = 0; i < 12; i++){
    for(int j = 0; j < 9; j++){
        arr[i][j] = func(i+1,j+1);
    }
}

我试过了

x <- mapply(func, 1:12, 1:9)

但它只将 (1,1)、(2,2)、(3,3) ... 传递给 func。如何将向量 1:12 和 1:9 的所有成对组合传递到 func?

这行得通吗:outer(1:12, 1:9, func)

如果没有,使用matrix(apply(expand.grid(1:12, 1:9), 1, func), 12, 9)

背景:

sapply(data.frame(t(expand.grid(1:12, 1:9))), function(v) func(v[1], v[2]))

expand.grid 将所有组合创建为数据框行。 t 转置结果,我把它当作一个 data.framet returns 令人讨厌的矩阵......即使应用于 data.frames ... ) 和 sapply 覆盖它。 由于 sapply 将数据帧视为列值列表,因此我得到了数据帧内容的列式(实际上是行式 - 在应用 t 转置之后......)列表。这些实际的行向量取自函数和应用于两个值的函数 func 产生的。所以最后,我们采用了所有可能的成对组合并将其输入到 function(v) ...