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

时间:2018-12-01 12:02:22

标签: r mapply

我对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中?

2 个答案:

答案 0 :(得分:1)

这项工作是否有效:outer(1:12, 1:9, func)

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

背景:"dims [product xx] do not match the length of object [xx]" error in using R function `outer`

答案 1 :(得分:0)

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

expand.grid将所有组合创建为数据框行。 t转置结果,我将其视为data.framet恼人地返回了一个矩阵...即使将其应用于data.frame上...)和{{ 1}}。 由于sapply像列值列表一样对待数据帧,因此我得到了按列列(实际上是按行-在应用sapply转置后...)所表示的数据帧列表。这些实际的行向量取自函数,并应用到两个值上的函数t产生。因此,最后,我们尽可能采用了每两对组合,并将其输入到function(v)...