Короткое замыкание в R поэлементно и / или | операторы - PullRequest
2 голосов
/ 13 января 2020

Я пытаюсь понять, как короткое замыкание реализовано в R. Вот пример data.frame:

 v <- data.frame(id=c(1,2,3,4), effective_from=c('', '1/1/2001', '10/1/2001', '1/1/2002'), effective_to=c('', '1/10/2001', '', '1/1/2001'))
  id effective_from effective_to
1  1                            
2  2       1/1/2001    1/10/2001
3  3      10/1/2001             
4  4       1/1/2002     1/1/2001

Я думаю, что сработает следующее утверждение (предположим, effective_from и effective_to являются строками, которые могут содержать дату или быть пустыми).

str_length(v$effective_from) > 0 & str_length(v$effective_to) > 0 & as.Date(v$effective_from) > as.Date(v$effective_to)

Но я получаю сообщение об ошибке:

Error in charToDate(x) : 
  character string is not in a standard unambiguous format

Я ожидал получить: FALSE, FALSE, FALSE, TRUE после выполнения моего оператора выше вместо ошибки.

Я бы подумал, что если длина effective_from или effective_to <1, то последующие шаги не будут выполнены. В первой строке я бы предположил, что, поскольку <code>effective_from не заполнено, мое приведенное выше утверждение вернет FALSE при попытке оценить str_length('effective_from'), что приведет к короткому замыканию при дальнейшей оценке.

Не уверен, почему это не работает .. . Как бы я реализовал короткозамкнутый элементный И или ИЛИ?

1 Ответ

2 голосов
/ 13 января 2020

Вот базовое решение R, где используются nchar() + as.vector() + as.Date():

res <- with(v, nchar(as.vector(effective_from)) >0 
            & nchar(as.vector(effective_to))>0
            & as.Date(as.vector(effective_from), "%m/%d/%Y") > as.Date(as.vector(effective_to), "%m/%d/%Y"))

такое, что

> res
[1] FALSE FALSE FALSE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...