2013-08-21 26 views
2

我通過從書「機器學習黑客的」 UFO例如工作引出行,我也遇到了問題。爲什麼do.call從我的名單

我已提取從原始數據城市(cities.state)的列表,並且這被存儲在列表中有61870項,其中的每一個有2個元素。即

str(city.state) 
List of 61870 
$ : chr [1:2] "Iowa City" "IA" 
$ : chr [1:2] "Milwaukee" "WI" 
$ : chr [1:2] "Shelton" "WA" 

我想這個列表轉換爲一個矩陣,這似乎在書中使用,這裏其他職位的辦法是使用

do.call(rbind, city.state) 

但是當我運行此我得到一個大小爲61591x2的矩陣。這個do.call似乎從原始列表中刪除了一些行,但我在r控制檯中沒有收到任何警告。

任何想法正在發生什麼,以及爲什麼do.call是下降的元素,或者替代品達到同樣的目的?

+0

很難說沒有你的數據。要檢查的一件事是確保列表中沒有任何項是NULL。 – joran

+0

如果你的意思是這個[file](https://github.com/johnmyleswhite/ML_for_Hackers/tree/master/01-Introduction/data/ufo),它有61393行。也許你從另一個來源得到它?或者在閱讀文件時發生錯誤,這將解釋爲什麼之後出現錯誤。 – 2013-08-21 20:02:35

+0

我從另一個源文件,該鏈接似乎並沒有爲我工作 – Kharoof

回答

0

在我的情況的問題是缺少值的組合和一些值被編碼爲NA。要強制do.call不放棄任何東西我用下面的循環

for (i in 1:length(city.state)) { 
    city.state[[i]] = c(city.state[[i]][1],city.state[[i]][2], i) 
} 

現在排索引添加到我的清單city.state下面的代碼不會丟棄任何值

do.call(rbind, city.state) 

希望這有助於其他

1

此再現錯誤。你的列表中應該有一些NULL條目。

ll <- list(letters[1:2],letters[1:2],c(NULL,NULL)) 

str(ll) 
List of 3 
$ : chr [1:2] "a" "b" 
$ : chr [1:2] "a" "b" 
$ : NULL 

str(do.call(rbind,ll)) 
chr [1:2, 1:2] "a" "a" "b" "b" 

嘗試刪除NULL值:

ll[!unlist(lapply(ll,is.null))]