2013-08-21 2 views
2

Я работаю над примером НЛО из книги «Обучение машинам для хакеров», и я столкнулся с проблемой.Почему 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

Если вы имеете в виду этот [файл] (https://github.com/johnmyleswhite/ML_for_Hackers/tree/master/01-Introduction/data/ufo), он имеет 61393 строки. Может быть, вы получили его из другого источника? Или произошла ошибка при чтении файла, что объясняет, почему вы получили ошибки впоследствии. –

+0

Я получил файл из другого источника, эта ссылка, похоже, не работает для меня – Kharoof

ответ

0

В моем случае проблема была комбинация пропущенных значений и некоторые значения кодируется в НС. Для того, чтобы заставить do.call не уронить что-нибудь добавить индекс строки в моем списке city.state используя следующий цикл

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

Теперь следующий код не уронить любые значениям

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))] 
Смежные вопросы