【发布时间】:2020-01-14 04:39:25
【问题描述】:
我正在尝试了解如何在 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 的长度effective_from 是空白的,我上面的语句将在尝试评估str_length('effective_from') 时返回 FALSE,从而使进一步的评估短路。
不知道为什么它不起作用...我将如何实现短路元素 AND 或 OR?
【问题讨论】:
-
可能是
Date格式不是正确的默认格式,即您可能需要format = yourformat(as.Date(v$effective_from) > as.Date(v$effective_to)) -
使用
&&,而不是&进行短路评估。 -
R 对整个向量进行操作。您不能将某些元素短路,而不能将其他元素短路。
-
创建索引并跳过这些元素可能会更好
-
日期格式为 m/d/y
标签: r