ifelse (length (date) == 1, date, otherdate) отличается для базы R, dplyr и data.table - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь проверить, имеют ли элементы вектора даты длину 0.

это нормально работает с использованием базы R, но возвращает POSIXct в виде цифры c:

a<-numeric(0)

>ifelse(length(a)==1,a,as.POSIXct("2017-12-26 17:53:53 AEDT"))
[1] 1514271233

Чтобы сохранить класс, нужно использовать dplyr или data.table, но они оба возвращают ошибки:

>dplyr::if_else(length(a)==1,a,as.POSIXct("2017-12-26 17:53:53 AEDT"))
Error: `true` must be length 1 (length of `condition`), not 0
Run `rlang::last_error()` to see where the error occurred.

>data.table::fifelse(length(a)==1,a,as.POSIXct("2017-12-26 17:53:53 AEDT"))
Error in data.table::fifelse(length(a) == 1, a, as.POSIXct("2017-12-26 17:53:53 AEDT")) : 
  'yes' has different class than 'no'. Please make sure that both arguments have the same class.

почему это отличается? Я думал, что эти функции просто проигнорируют параметр TRUE, когда логический тест вернет FALSE. Есть ли решение, которое не предусматривает обратное преобразование в POSIXct?

1 Ответ

1 голос
/ 06 апреля 2020

Как насчет старого доброго пути?

if(length(a)==1){a}else(as.POSIXct("2017-12-26 17:53:53 AEDT"))
[1] "2017-12-26 17:53:53 EST"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...