2012-05-16 58 views
12

我有R中的列表:追加到動態名稱的列表,R

a <- list(n1 = "hi", n2 = "hello") 

我想附加到這個命名爲名單,但名稱必須是動態的。也就是說,他們是從一個字符串創建(例如:paste("another","name",sep="_")

我試着這樣做不工作:

c(a, parse(text="paste(\"another\",\"name\",sep=\"_\")=\"hola\"") 

什麼是做到這一點的正確方法的最終目標就是要追加該列表,動態地選擇我的名字。

回答

19

你可以只使用索引用雙括號。無論下面的方法應該工作。

a <- list(n1 = "hi", n2 = "hello") 
val <- "another name" 
a[[val]] <- "hola" 
a 
#$n1 
#[1] "hi" 
# 
#$n2 
#[1] "hello" 
# 
#$`another name` 
#[1] "hola" 

a[[paste("blah", "ok", sep = "_")]] <- "hey" 
a 
#$n1 
#[1] "hi" 
# 
#$n2 
#[1] "hello" 
# 
#$`another name` 
#[1] "hola" 
# 
#$blah_ok 
#[1] "hey" 
+0

謝謝你,非常簡短,點解 – Alex

9

您可以使用setNames設置在飛行的名字:

a <- list(n1 = "hi", n2 = "hello") 
c(a,setNames(list("hola"),paste("another","name",sep="_"))) 

結果:

$n1 
[1] "hi" 

$n2 
[1] "hello" 

$another_name 
[1] "hola" 
+0

謝謝你,這是偉大的。很高興知道setNames。 – Alex