2016-04-29 39 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

一個方面是迭代追加到vector(或data.frame)總是一個壞主意。如果可能的話,使用類似numeric(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