【发布时间】:2019-03-11 21:03:49
【问题描述】:
if 的文档说条件应该是(强调我的):
非 NA 的长度为 1 的逻辑向量。长度条件 当前接受大于 1 并发出警告,但只有 使用第一个元素。相反,当 环境变量 _R_CHECK_LENGTH_1_CONDITION_ 设置为 true。 如果可能,其他类型被强制为逻辑,忽略任何类。
强制是如何完成的,“忽略任何类”是什么意思?
例如,表达式list(1) 可以通过as.logical 显式强制转换为TRUE,并通过相等比较隐式视为TRUE:
> as.logical(list(1))
[1] TRUE
> list(1) == TRUE
[1] TRUE
那么,为什么下面会失败呢?
> if (list(1)) print("Passed test!")
Error in if (list(1)) print("Passed test!") :
argument is not interpretable as logical
【问题讨论】:
-
也许在这种情况下类型仅指原子类型。如果你这样做
if (list(1)[[1]]) ...,那么它可以工作 -
因素也有一些奇怪的行为,比较
if ("FALSE")和if(factor("FALSE", levels = "FALSE"))
标签: r