Почему упаковка as.Date () в sapply возвращает числовой тип данных, а lapply возвращает тип данных date? - PullRequest
1 голос
/ 25 апреля 2020

Где я работаю, набор данных, который мы получаем, отформатирован в символьном формате, и поэтому его необходимо заменить на соответствующие им типы данных для любого анализа в R.

Но странная вещь, которую я заметил, - это преобразование столбец, содержащий даты от символа к датам, используя as.Date в sapply преобразует столбцы в числа, тогда как lapply преобразует их в требуемый формат даты. .

1 Ответ

0 голосов
/ 25 апреля 2020

Добро пожаловать в StackOverflow и отличный вопрос.

Это связано с типом результата. sapply возвращает вектор, а шаг as.vector() удаляет атрибут класса. Это прискорбно, но задокументировано:

R> dates <- Sys.Date() + 0:2
R> dates
[1] "2020-04-25" "2020-04-26" "2020-04-27"
R> as.vector(dates)
[1] 18377 18378 18379
R> 

(И «число» - это то, как даты представляются внутренне: количество дней с эпохи 1970-01-01. Вы получаете то же самое, когда делаете as.numeric() или as.integer(0 на них.)

Списки имеют более богатую семантику, а lapply(), который возвращает список, не вызывает побочного эффекта, описанного выше:

as.list(dates)
[[1]]
[1] "2020-04-25"

[[2]]
[1] "2020-04-26"

[[3]]
[1] "2020-04-27"

R> 
...