2015-08-21 91 views
1

I'm新R和我倒是想執行以下簡單的代碼:R:添加值向量與循環

vec_color <- c("red", "blue", "green", "yellow", "orange") 
col_vec_final = c() 

i <- 1 
while (i <= 3) 
{ 
col_vec_final <- c(col_vec_final, i = vec_color[i]) 
i <- i+1 
} 

我倒是希望得到以下的輸出:

col_vec_final 
    1  2  3 
"red" "blue" "green" 

但是我只得到如下:

col_vec_final 
    i  i  i 
"red" "blue" "green" 

能否請你幫我與,告訴我什麼是錯我的代碼?

謝謝!

回答

1
vec_color <- c("red", "blue", "green", "yellow", "orange") 

首先,請記住,你可以向量化這整個操作,做這一切在一條線,像這樣 -

l <- seq_len(3) 
(col_vec_final <- setNames(vec_color[l], l)) 
#  1  2  3 
# "red" "blue" "green" 

至於你while()循環得好,我建議你首先分配結果向量,因爲它是更好的做法和很多比在一個循環中建立一個矢量更高效 -

n <- 3 
col_vec_final <- vector(class(vec_color), n) 

然後執行以下操作 -

i <- 1 
while (i <= n) 
{ 
    col_vec_final[i] <- vec_color[i] 
    names(col_vec_final)[i] <- i 
    i <- i + 1 
} 

col_vec_final 
#  1  2  3 
# "red" "blue" "green" 
+0

或'setNames(vec_color,1:length(vec_color))'。請注意,setNames會返回重命名的向量,因此您需要分配結果。另外,如果你做'names(vec_color)< - 1:length(vec_color)',那麼vec_color就會被修改。 –