对参数的成对组合应用函数
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.frame
(t
returns 令人讨厌的矩阵......即使应用于 data.frame
s ... ) 和 sapply
覆盖它。
由于 sapply
将数据帧视为列值列表,因此我得到了数据帧内容的列式(实际上是行式 - 在应用 t
转置之后......)列表。这些实际的行向量取自函数和应用于两个值的函数 func
产生的。所以最后,我们采用了所有可能的成对组合并将其输入到 function(v) ...
我对 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.frame
(t
returns 令人讨厌的矩阵......即使应用于 data.frame
s ... ) 和 sapply
覆盖它。
由于 sapply
将数据帧视为列值列表,因此我得到了数据帧内容的列式(实际上是行式 - 在应用 t
转置之后......)列表。这些实际的行向量取自函数和应用于两个值的函数 func
产生的。所以最后,我们采用了所有可能的成对组合并将其输入到 function(v) ...