2013-01-10 47 views
0

我需要將函數應用於嵌套列表。第一個列表項的結構是:lopply在嵌套列表中R

str(ldf[[1]]) 
List of 3 
$ Header :List of 10 
    ..$ abif    : chr "ABIF" 
    ..$ version    : int 101 
    ..$ DirEntry.name  : raw [1:4] 74 64 69 72 
    ..$ DirEntry.number  : int 1 
    ..$ DirEntry.elementtype: int 1023 
    ..$ DirEntry.elementsize: int 28 
    ..$ numelements   : int 99 
    ..$ dataoffset   : int 97865 
    ..$ datahandle   : int 0 
    ..$ unused    : num [1:47] 0 0 0 0 0 0 0 0 0 0 ... 
$ Directory:'data.frame': 99 obs. of 7 variables: 
    ..$ name  : chr [1:99] "ANME" "CMNT" "CMNT" "CMNT" ... 
    ..$ tagnumber : int [1:99] 1 1 2 3 4 5 1 1 1 1 ... 
    ..$ elementtype: int [1:99] 19 18 18 18 18 18 19 19 19 18 ... 
    ..$ elementsize: int [1:99] 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ numelements: int [1:99] 13 29 29 29 29 29 10 10 4 9 ... 
    ..$ datasize : int [1:99] 13 29 29 29 29 29 10 10 4 9 ... 
    ..$ dataoffset : int [1:99] 140 97720 97749 97778 97807 97836 97686 97696 1346454016 95088 ... 
$ Data  :List of 99 
    ..$ ANME.1 : chr "AFLP-Default" 
    ..$ CTID.1 : chr "GS#12-081" 
    ..$ CTNM.1 : chr "GS#12-081" 
    ..$ CTOw.1 : chr "PAB" 
    ..$ CTTL.1 : chr "Comment:" 
    ..$ CpEP.1 : chr "\001" 
    ..$ DATA.1 : int [1:8960] 1 -2 -3 -3 -2 2 0 0 1 2 ... 
    ..$ DATA.2 : int [1:8960] -2 3 4 5 2 -3 0 0 -2 -1 ... 
    ..$ DATA.3 : int [1:8960] 0 0 -6 -6 -2 3 -5 1 3 1 ... 
    ..$ DATA.4 : int [1:8960] -1 -1 3 2 1 -5 3 -4 -4 -6 ... 
    ..$ DATA.5 : int [1:544] 0 0 0 0 0 0 0 0 0 0 ... 
    ..$ DATA.6 : int [1:544] 0 0 0 0 0 0 0 0 0 0 ... 
    ..$ DATA.7 : int [1:544] 6 6 6 6 6 6 15 15 15 15 ... 
    ..$ DATA.8 : int [1:544] 60 60 60 59 59 59 59 59 59 59 ... 

假設我對$ Data $ DATA.1中的值感興趣。如何將函數應用於每個$ Data $ DATA.1?像:

findpeaks(ldf[[1]]$Data$DATA.1,threshold=500) 
findpeaks(ldf[[2]]$Data$DATA.1,threshold=500) 
findpeaks(ldf[[x]]$Data$DATA.1,threshold=500) 
... 

來源:How do you apply a function to a nested list?我得到:在LDF

lapply(ldf, function(x) lapply(lapply(x, '[[', 'Data'), function(x) findpeaks(ldf[[x]]$Data$DATA.1,threshold=500))) 

錯誤[[X]:嘗試選擇不到一元

這是名單深度嵌套使用lapply?

+3

我想你誤會了你從回答解除了代碼。我會認爲'lapply(ldf,function(x)findpeaks(x $ Data $ DATA.1,...))'應該就足夠了。 – joran

+0

是的喬蘭,我誤解了答案...... lapply(ldf,function(x)findpeaks(x $ Data $ DATA.1,...))就足夠了。我是否需要刪除該問題? – Chargaff

+0

不,請隨時發佈自己作爲答案的代碼並接受它。 – joran

回答

2

從joran的評論,這裏的工作代碼:

lapply(ldf,function(x) findpeaks(x$Data$DATA.1,threshold=500))