2016-04-29 24 views
0

Rでは「名前付き」ベクトルを作成して追加する方法。私の現在のアプローチは、別々の名前ベクトルを作成し、後で名前を割り当てることです。Rに名前付きベクトルを追加

v = c() 
vName = c() 
for (i in 1:5) { 
    # do something complicated and store output 
    k = i*i ## or get output from any other function 
    v = c(v,k) 
    vName = c(vName, k) 
} 
names(v) = vName 

もっと良い方法がありますか?

+1

1つの点は、反復的にベクトル(またはdata.frame)に追加することは常に悪い考えです。可能な場合は、数値(vectorLength)のようなものを使用してベクトルを事前に割り当てます。正確なサイズがわからなくても、それをオーバーシュートすることはまだ追加するよりも良いでしょう。 – lmo

+0

@jogo目的は単に名前付きベクトルを作成するのではなく、出力を追加することです(この例では編集しました)。 –

+0

@lmo例を挙げてください。 –

答えて

4

いくつかの簡単な状況で、あなたはsetNamesを使用することができます。

setNames(1:5, letters[1:5]) 

が、ループの外で名前を適用するが、行くには良い方法です。あなたはベクトルを事前に割り当てる場合は、ループ内で名前を追加することができます

# pre-allocate vectors of known size (length of for loop) 
v=numeric(5) 
vName = character(5) 
for (i in 1:5) { 
    # do something complicated and store output 
    k = i*i ## or get output from any other function 
    kName = <something related to k> 

    v[i] = k 
    vName[i] = kName 
} 

事前割り当てベクトルを、ループでいっぱいにメモリ内に固定されたスポットを設定します。それらに繰り返し追加すると、Rはすべての反復でベクトルのコピーを作成する必要があります。

+0

には、事前割当のヒントとして1が加算されます。 – Jimbou

関連する問題