Во-первых, правильное использование data.matrix:
data.matrix(UN2010)
, поскольку он автоматически преобразуется в числовое значение. lapply
в вашем коде является первым источником ошибки, которую вы получите. Вы помещаете список в функцию data.matrix
, а не в фрейм данных. Таким образом, он возвращает список матриц, а не матрицы.
Во-вторых, unlist
возвращает вектор, а не матрицу. Поэтому уверен, что вы не найдете «первую строку с NA», поскольку у вас есть вектор. Что может объяснить часть вашего замешательства.
Возможно, у вас где-то есть столбец символов. Преобразование этого в числовое дает NA. Если вы этого не хотите, исключите их из дальнейшего анализа. Одна из возможностей - использовать colwise()
из пакета plyr
для преобразования только факторов:
colwise(as.numeric,is.factor)(UN2010)
Который возвращает фрейм данных только с факторами. Это может быть легко преобразовано data.matrix()
или as.matrix()
. В качестве альтернативы вы используете базовое решение:
id <- sapply(UN2010,is.character)
sapply(UN2010[!id],as.numeric)
, который вернет вам матрицу со всеми не символьными столбцами, преобразованными в числовые. Если вы действительно хотите сохранить информационный кадр со всеми исходными столбцами, вы можете сделать:
UN2010frame <- UN2010
UN2010frame[!id] <- lapply(UN2010[!id],as.numeric)
Пример кода игрушки:
UN2010 <- data.frame(
F1 = factor(rep(letters[1:3],10)),
F2 = factor(rep(letters[5:10],5)),
Char = rep(letters[11:16],each=5),
Num = 1:30,
stringsAsFactors=FALSE
)