関数を適用するために、Mで選択する必要がある「行インデックスのペア」を含む行列Mと行列Lがあります。この関数は、2 行と M の列数が同じ行列を返します。
set.seed(1)
# M has even number of rows
M = matrix(runif(24), ncol = 3)
# each row of L is a pair of row indexes that will be selected in M
# so the first 'pair' is M[1,] M[3,], the second is M[2,] M[4,] and so on
L = matrix(c(1,3,2,4,6,7), ncol = 2, byrow = T)
関数 f は次のとおりです。
f = function(r1, r2)
{
matrix(c(r1+r2, r1-r2), nrow = 2, byrow = T)
}
問題は、L をループし、「ペア」ごとに f を適用し、結果を別の行列に追加する必要があることです。したがって、上記のコードの場合、最終結果は次のようになります。
#first row of L
res1 = f(M[1,], M[3,])
#second row of L
res2 = f(M[2,], M[4,])
#third row of L
res3 = f(M[6,], M[7,])
#append everything
RES = rbind(res1, res2, res3)
この操作をベクトル化するにはどうすればよいですか? L の行インデックスはランダムであり、最終結果の行の順序は重要ではありません。
助けてくれてありがとう!