2013-06-18 31 views
8

我可能會將我的頭撞到桌子上,因爲它顯而易見,但是如何從字符向量編程創建列表,以便字符向量提供標記和另一個向量值。例如。以編程方式使用字符向量中的標記創建列表

character.vector <- c('first.element', 'second.element') 
values.vector <- c(1, 2) 
a.list <- list(//magic here//) 
print(a.list) // prints the same as list(first.element=1, second.element=2) 

回答

13
character.vector <- c('first.element', 'second.element') 
values.vector <- c(1, 2) 

as.list(setNames(values.vector, character.vector)) 
+1

真好!正是我需要的。不知道setNames函數,從現在開始廣泛使用它! :-D – joidegn

6

您可以設置:

> names(values.vector) <- character.vector 
    > values.vector 
    first.element second.element 
       1    2 

,當然,它在必要時轉換成一個列表:

> as.list(values.vector) 
$first.element 
[1] 1 

$second.element 
[1] 2 
5

其他的答案覆蓋更好,只是爲了完整起見,另一種方法是使用parse構建要評估的表達式,並使用eval對其進行評估....

# tag and values for list elements 
tag <- c('first.element', 'second.element') 
val <- c(1, 2) 


content <- paste(tag , "=" , val , collapse = " , ") 
content 
# [1] "first.element = 1,second.element = 2" 

eval(parse(text = paste0("list(" , content , ")"))) 
# $first.element 
# [1] 1 
# 
# $second.element 
# [1] 2 
5

奇怪,沒有人的提及structure

structure(as.list(values.vector), names=character.vector) 
相關問題