2013-03-08 127 views
2

我有一個列表,其中有些列表是NAempty lists。我想提取所有填充數據的列表並刪除所有列表empty(NA)刪除列表中的空列表

我想要的代碼是:

lapply(outputfile,function(x){ 
    if(outputfile != NA){ 
    test<-lapply(outputfile,unlist) 
}}) 

但是,這是行不通的。

列出的清單是這樣的:(隨機數據的小例子)

list(NA, NA, NA, NA, NA, NA, list(c(5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5))) 

我只想提取與在它的5S名單。前6個列表應該被忽略,例如除去。

任何幫助表示讚賞

+4

'L [!is.na(L)]'(除去NA的在第一級)? – Arun 2013-03-08 11:27:35

+0

@Arun謝謝,有時我不知道它有多簡單:S – 2013-03-08 11:29:22

+1

@Arun即使它很簡單,也許你應該添加它作爲答案,以便它可以標記並從未答覆的Q中刪除? – 2013-03-08 11:38:45

回答

7

因此,在第一級刪除NA,你可以直接使用is.na

l[!is.na(l)] 

另外,您也可以使用Filter它試圖強迫的結果評估函數邏輯並返回那些評估爲TRUE的元素。你可以做,例如:

Filter(function(x) !is.na(x), l) 

(或)相同(如@flodel寫入下評論)

Filter(Negate(is.na), l) 
+1

或'Filter(Negate(is.na),l)' – flodel 2013-03-08 12:11:25

+0

@Arun 2中哪個最快?我在兩個函數上做了'system.time',1st是最快的。但是,這是3000'列表'。 – 2013-03-08 12:46:16

+0

@ flodel,的確如此!輝煌! – Arun 2013-03-08 13:05:47