2013-02-10 62 views
3

如果我说l = list(),然后我做了l[[27]] = 100,它会创建26个其他值为NULL的条目。有没有办法避免这种情况?如何在R中分配一个列表而不创建一堆新元素?

例如,如果我运行:l <- list(); for (i in c(4,7,1)) { l[[i]] <- i^1 }

它将创造的条目从1到7,和NULL值的列表中的所有没分配的。我怎样才能避免这些虚假的条目?

回答

8

的指数使用字符值:

l <- list(); for (i in c(4,7,1)) { l[[as.character(i)]] <- i^1 } 

> l 
$`4` 
[1] 4 

$`7` 
[1] 7 

$`1` 
[1] 1 
0

你可以添加到列表:

l <- list(); for (i in c(4,7,1)) { l <- append(l, i^1) } 
4

我会避免for回路,并使用lapply

> x <- c(4, 7, 1) 
> setNames(lapply(x, `^`, 1), x) 
$`4` 
[1] 4 

$`7` 
[1] 7 

$`1` 
[1] 1 
+0

乔希评论你也可以做'setNames(as.list(x^1),x)'。是的,这会在这里工作,值得一提的是,谢谢。我的意思是可以应用一个非向量化的函数,所以它更一般。 – flodel 2013-02-10 20:17:40

+0

同意,这就是为什么我删除了我的查询:我意识到你正在寻找更一般的情况! – 2013-02-10 20:26:47

相关问题