Rの空のベクトルに値を追加しますか?
Append Value Empty Vector R
解決:
forループ内のオブジェクトに追加すると、反復ごとにオブジェクト全体がコピーされるため、多くの人が「Rは遅い」または「Rループは避ける必要がある」と言います。
BrodieGがコメントで述べたように、目的の長さのベクトルを事前に割り当ててから、ループ内の要素値を設定することをお勧めします。
ベクトルに値を追加するいくつかの方法があります。それらのすべてはお勧めできません。
ループ内のベクトルに追加する
#(i in 1:length(values))vector [i]の1つの方法<- values[i] # another way for (i in 1:length(values)) vector <- c(vector, values[i]) # yet another way?!? for (v in values) vector <- c(vector, v) # ... more ways help( 'append')はあなたの質問に答え、この質問を書くのにかかる時間を節約しました(しかし、あなたは悪い習慣を身につけることになります)。 ;-)
ご了承くださいベクター<- c() isn't an empty vector; it's ヌル。空の文字ベクトルが必要な場合は、ベクター<- character().
ループする前にベクトルを事前に割り当てます
もし、あんたが 絶対に必要です forループを使用する場合は、ループの前にベクトル全体を事前に割り当てる必要があります。これは、より大きなベクトルを追加するよりもはるかに高速です。
set.seed(21)の値<- sample(letters, 1e4, TRUE) vector <- character(0) # slow system.time( for (i in 1:length(values)) vector[i] <- values[i] ) # user system elapsed # 0.340 0.000 0.343 vector <- character(length(values)) # fast(er) system.time( for (i in 1:length(values)) vector[i] <- values[i] ) # user system elapsed # 0.024 0.000 0.023
FWIW:pythonのappend()に類似しています:
NS<- 1 b <- c(b, 2)
いくつかのオプションがあります。
c(ベクトル、値)
append(vector、values)
vector [(length(vector)+ 1):( length(vector)+ length(values))]<- values
1つ目は標準的なアプローチです。 2つ目は、末尾以外の場所に追加するオプションを提供します。最後のものは少しゆがんでいますが、変更するという利点がありますベクトル(実際には、同じように簡単に行うことができますがベクター<- c(vector, values).
Rでは、ベクトルを循環する必要がないことに注意してください。あなたはそれら全体を操作することができます。
また、これはかなり基本的なものなので、いくつかを通過する必要があります 参照 。
OPフィードバックに基づくその他のオプション:
for(i in values)ベクトル<- c(vector, i)