2012-11-28 14 views
5

當創建嵌套列表時,我認爲,列表元素有用的命名結構。我有一個列表清單,並且想要應用任何列表中包含的每個矢量的函數。 lapply這樣做,但然後剝離列表的命名結構。我怎麼能lapply嵌套列表的每個向量元素不剝離名稱?我嘗試傳遞索引,但似乎做同樣的事情(地帶名稱)。lapply over nested list並保留命名/結構

TEST <- list(n1=list(a="5", b="65"), n2=list(a="f", b= "f6")) 
TEST 
lapply(TEST, function(x) gsub("6", "foo", x)) 
lapply(seq_along(TEST), function(i) gsub("6", "foo", TEST[[i]])) 

控制檯輸出:

> TEST 
$n1 
$n1$a 
[1] "5" 

$n1$b 
[1] "65" 


$n2 
$n2$a 
[1] "f" 

$n2$b 
[1] "f6" 


> lapply(TEST, function(x) gsub("6", "foo", x)) 
$n1 
[1] "5" "foo5" 

$n2 
[1] "f" "ffoo" 

期望的結果:

$n1 
$n1$a 
[1] "5" 

$n1$b 
[1] "foo5" 


$n2 
$n2$a 
[1] "f" 

$n2$b 
[1] "ffoo" 
+0

@shujaa是我編輯,以反映您的評論 –

回答

10

看來你想要的rapply變體*申請家庭

rapply(TEST, function(x){gsub("6", "foo", x)}, how = "list") 

$n1 
$n1$a 
[1] "5" 

$n1$b 
[1] "foo5" 


$n2 
$n2$a 
[1] "f" 

$n2$b 
[1] "ffoo" 

你也可以做它這樣可以避免編寫匿名函數

rapply(TEST, gsub, pattern = "6", replacement = "foo", how = "list") 
+0

+1打我吧,救了我一些打字 – Andrie

+1

喔新的R巫術我從來沒有合作過。謝謝Dason。我知道'rapply',但不知道如何或爲什麼要使用它。完善。 –

+0

沒有'rapply'的任何其他方式?它評估它的參數,所以在循環語言對象時它沒有用。 – jangorecki