2
私は、マトリックス内の行のすべての可能な組み合わせを合計することを検討しています。 rowSums()
に似た関数が、nrow()
の合計を生成する代わりに、nrow()^nrow()
の合計を生成します。例えばMatrixの行のすべての組み合わせを合計するにはどうすればよいですか?
は:
set.seed(10)
dummymat <- matrix(floor(runif(9, 0, 2)), nrow = 3, ncol = 3)
は行列を生成します
[,1] [,2] [,3]
[1,] 1 1 0
[2,] 0 0 0
[3,] 0 0 1
行列の全ての可能な行の合計を検索するには、次の非常に非効率的なコードを書くことができる:
allrowsums <- c()
for(i in 1:nrow(dummymat)) {
firstcolval <- dummymat[i,1]
for(j in 1:nrow(dummymat)) {
secondcolval <- dummymat[j,2]
for(k in 1:nrow(dummymat)) {
thirdcolval <- dummymat[k,3]
rowsum <- firstcolval + secondcolval + thirdcolval
allrowsums <- append(allrowsums,rowsum)
}
}
}
次の出力が得られます。
[1] 2 2 3 1 1 2 1 1 2 1 1 2 0 0 1 0 0 1 1 1 2 0 0 1 0 0 1
はるかに大きなコードではどのように簡潔なコードを書くことができますか?
おかげに供給する列要素のリストを作成することができ、あなたはそれが任意の列の長さの行列を扱うことができるよう、その答えを動的にする方法を考えることができますか? (コードは毎回調整する必要はありません)。 100列の行列の場合、この答えのコードもかなり長くなります。 –
私はあなたの質問に答えるための答えを編集しました。これがうまくいく場合は、回答を受け入れて、近くにマークしてください。 – Djork
おかげさまで@Djork、PITAになることは申し訳ありませんが、このソリューションはメモリ消費のために大きな行列を扱うことができません。例えば、 'dummymat < - matrix(floor(runif(5000,0,2)、nrow = 1000、ncol = 5)' –