2013-02-10 29 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

相關問題