Почему упаковка as.Date () в sapply возвращает числовой тип данных, а lapply возвращает тип данных даты?

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

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

Мне просто было любопытно, почему такое поведение имеет место.


person Nitesh    schedule 25.04.2020    source источник
comment
sapply делает лаппли и упрощает его. См. Файл справки.   -  person G. Grothendieck    schedule 25.04.2020


Ответы (1)


Добро пожаловать в 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> 
person Dirk Eddelbuettel    schedule 25.04.2020