時間の増加はアクセス時間に関連しているとは思われませんが、コピーを作成することによるものです。これらの割り当てのそれぞれは、ベクターのコピーを作ることを含む。これはtracemem
でテストできます。
# initialize vector (10 zeros)
tracemem({vec <- integer(10)})
[1] "< 0000000011D48720>"
# assign value to 7th position
tracemem({vec[7] <- 6L})
tracemem [0x0000000011d48720 - > 0x00000000111a02b0]:
[1] "< 0000000012E25468>"
ベクトルが大きくなると、コピー処理にかかる時間が長くなります。
また、vec <- (1:(i*1000))
が整数ベクトルであることに注意し、そしてvec[1] <- 0
は概ねメモリ内のベクトルの大きさを倍増ダブルベクターにVEC変わり。
まず、整数ベクトルを作成し、サイズとタイプを確認します。
# start over with similar syntax to question
tracemem({vec <- 1:10})
[1] "< 0000000011E55508>"
#チェックサイズ object.size(VEC)
88バイト
# check type
typeof(vec)
[1] "整数"
次に、7位、再チェックのサイズとタイプに0を割り当てる割り当てます。 0は当初の値と同じ値であるように見えますが、実際には整数ではなく2倍です。
# assign value
tracemem({vec[7] <- 0})
tracemem [0x0000000011e55508 - > 0x0000000]:
tracemem [0x0000000- > 0x0000000013394740]:
[1] "< 00000000130EBA60>"
# check size
object.size(vec)
168バイト
ここ
# check type
typeof(vec)
[1] "ダブル"
お知らせ、二つの別々のコピー命令があること。私の推測では、最初はベクトルを整数からdoubleに変換するコピーで、2番目は代入です。
ベクトルを整数ベクトルとして保持するには、代わりにvec[1] <- 0L
を使用します。「L」は整数にすることをRに指示するためです。
注このコピー動作tracemem
窓
出典
2016-08-04 11:48:14
lmo
ホ7とMS Rオープン3.2.5を使用してRstudioとRguiの両方で観察されていること?私はこのコードの近くのどこにでもdata.frameを見ません。 – Frank