2016-06-17 6 views
0

長い行列(ncol = 6、nrow = 50,000,000 +)を持っています。リストでは、[私は1、]、日付でデータフレーム/マトリックスをRのリストに変換する

[I]、[4]と[I]、[5]の名前(またはキー)です:私は行列のリストにそれを変換したいです

[I]、[2]及び[I]、[3]時刻である、

[iが、6]リストに格納される値です。

リストの行列はすべて同じ次元です。

for (i in seq(1, nrow(a2015_15))) { 
    OD_L_2015_15[[ 
     paste(a2015_15[i,4], a2015_15[i,5]) 
     ]] [ 
      a2015_15[i,1], paste(a2015_15[i,2], a2015_15[i,3]) 
      ] = 
     as.numeric(a2015_15[i,6]) 
} 

つまり、実行には1〜2時間かかりますが、これは特に遅いコンピュータでは苦痛です。

apply文を使用すると、これをより迅速に実行するための提案はありますか? 私はa2015_15(a2015_15 [i、]を保存して参照しています)への呼び出しを制限しようとしましたが、それは役に立たなかったようです。

ありがとうございました。

編集:

Matrix

リストに分割されます: ここで私が変更したい行列です OD_L_2015_15 [[キー1、キー2]] [日付、C(タイム、タイム2)] =値

+2

'dput'を使用していくつかの行を表示できますか? - 10程度かかります - ちょうど私たちは遊ぶために再現可能なものを持っています。 – thelatemail

+0

すべての行列のすべての値が「塗りつぶされていますか?たとえば、関連付けられた値がない日付と時刻のペアを使用できますか?そうでなければ、問題はずっと簡単になります。 – nograpes

+1

あなたは 'data.table'パッケージを使用しましたか? – Uwe

答えて

0

割り当て操作はベクトル化可能である、つまりiの1つの値に対して機能する場合、iのベクトルに対しても成功する必要があります。 。

i <- seq(1,nrow(a2015_15)) 
OD_L_2015_15 <- list() 
OD_L_2015_15[[ paste(a2015_15[i,4], a2015_15[i,5])]] [ 
            a2015_15[i,1], paste(a2015_15[i,2], a2015_15[i,3]) ] <- 
as.numeric(a2015_15[i,6]) 

これはテストされていません。ループが成功したというあなたの肯定に頼っています。現時点であなたの記述に「現実」に「接地」がないため、テストされたソリューションが必要な場合は、このマトリクスのより小さなバージョンをポストする必要があります。

+0

ありがとう、私はベクトル化を完全に忘れてしまった。しかし、私はそれを行うと、「レベル2のペーストでa2015_15 [i、4]、a2015_15 [i、5]]の再帰インデックス作成に失敗しました。 – dflorek

+0

"この行列のバージョンを投稿する"不明ですか? –

+0

私は秘密にしたい行列を追加しましたが、再帰的な索引付けの失敗がまだ発生しています。私はそれを回避しようとしています。 – dflorek

関連する問題