実行に 1 時間以上かかる単純なループで立ち往生しており、それを高速化するために助けが必要です。
基本的に、31 列と 400,000 行の行列があります。最初の 30 列には値があり、31 番目の列には列番号があります。行ごとに、31 番目の列で示される列の値を取得する必要があります。
行の例: [26,354,72,5987..,461,3] (これは、列 3 の値が検索されることを意味します (72))
遅すぎるループは次のようになります。
a <- rep(0,nrow(data)) #To pre-allocate memory
for (i in 1:nrow(data)) {
a[i] <- data[i,data[i,31]]
}
私はこれがうまくいくと思います:
a <- data[,data[,31]]
...しかし、「エラー: サイズ 2.8 Mb のベクトルを割り当てることができません」という結果になります。
これは非常に単純な質問なのではないかと心配しているので、apply、lapply、reshape などを理解しようと何時間も費やしましたが、どういうわけか R のベクトル化の概念を把握できません。
マトリックスには実際にはさらに多くの列があり、それらはパラメーターにも渡されます。そのため、マトリックスを再構築したり分割したりしたくありません。
あなたのサポートは高く評価されています!
クリス