2015-07-10 40 views
2

我有一個兩個嵌套循環,我想用lapply而不是for循環來做。我已經決定了下面這個簡單的例子:如何在使用lapply時在列表下列出名單?

a<-as.list(c(1,2)) 
b<-as.list(c(6,7)) 
results<-lapply(a, function(x) lapply(b, function(y) x+y)) 

> results 
[[1]] 
[[1]][[1]] 
[1] 7 

[[1]][[2]] 
[1] 8 


[[2]] 
[[2]][[1]] 
[1] 8 

[[2]][[2]] 
[1] 9 

我怎麼可以指定名稱這份名單,我可以指定使用的名稱(結果)名稱的第一級< -a,但我不知道該怎麼辦它爲第二級。命名應該循環完成,因爲在我的主程序中b的長度可能會改變。 我很感激,如果有人能給我一些提示。

回答

2

你應該注意到,lapply()本身只是一個構造良好的for()循環的包裝,所以你沒有獲得任何效率,只是可讀性。這且不說,最簡單的方法是將名稱添加到列表中進入你的嵌套lapply()電話:

a<-as.list(c(1,2)) 
b<-as.list(c(6,7)) 
names(a) <- c("a","b") 
names(b) <- c("c", "d") 
results<-lapply(a, function(x) lapply(b, function(y) x+y)) 

這種方法產生:

> results 
$a 
$a$c 
[1] 7 

$a$d 
[1] 8 


$b 
$b$c 
[1] 8 

$b$d 
[1] 9 

當然然後可以重命名嵌套組件是這樣的:

> names(results$a) <- c("e","f") 
> results$a 
$e 
[1] 7 

$f 
[1] 8 
+0

感謝您的評論。我想在lapply中輸入名稱(b)< - c(「c」,「d」)。我怎樣才能做到這一點?我不確定我應該如何將這個包含在樂譜中 – newbie

+1

你能解釋一下爲什麼,或者改進你提供的例子來說明你真正希望看到的結果嗎? –

+0

@newbie也許你應該考慮在創建時命名'b'',否則很難在沒有更好的工作示例的情況下看到你想要改進的東西 – MichaelChirico

相關問題