2013-06-03 30 views
1

我想插入一个元素到R中的列表中。问题是我希望它有一个名称包含在一个变量中。在R中,如何构造一个包含名称包含在变量中的元素的匿名列表?

> list(c = 2) 
$c 
[1] 2 

有意义。我显然想要一个名为'c'的列表项,其中包含2.

> a <- "b" 
> list(a = 1) 
$a 
[1] 1 

哎呦。当我创建一个列表时,如何告诉R当我希望它将一个单词当作一个变量而不是一个名称?

有些事情我想:

> list(eval(a)=2) 
Error: unexpected '=' in "list(eval(a)=" 
> list(a, 2) 
[[1]] 
[1] "b" 

[[2]] 
[1] 2 
> list(get(a) = 2) 
Error: unexpected '=' in "list(get(a) =" 

我知道,如果我已经有一个列表()奠定左右,我可以这样做:

> ll<-list() 
> ll[[a]]=456 
> ll 
$b 
[1] 456 

...但是:

> list()[[a]]=789 
Error in list()[[a]] = 789 : invalid (NULL) left side of assignment 

我该如何构建一个匿名列表,其中包含名称包含在变量中的元素?

回答

6

一个选项:

a <- "b" 
> setNames(list(2),a) 
$b 
[1] 2 

或更“自然”:

l <- list(2) 
names(l) <- a 

,如果你在setNames看代码,你会看到,这两种方法是如此相同,只是R中的“这样做”的方式基本上是创建对象,然后分两步设置名称。 setNames只是一个方便的方法。

+0

谢谢!这样做通过setNames技巧让我做foo < - c(foo,setNames(list(baz),bar)) –

相关问题