为什么当我们使用 &&或||两个逻辑向量之间仅返回 1 个元素
我是 R 新手,我试图理解为什么当我们使用 &&或||在两个逻辑向量之间,它仅返回 1 个元素
a<-c(TRUE,FALSE,TRUE)
b<-c(FALSE,FALSE,FALSE)
a&&b
为什么这不返回逻辑向量?
I am new to R and I am trying to understand why when we use && or || between two logical vectors it returns just 1 element
a<-c(TRUE,FALSE,TRUE)
b<-c(FALSE,FALSE,FALSE)
a&&b
Why doesn’t this return a logical vector?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
R中有两种逻辑运算符,向量化和非向量化。
&&
和||
未矢量化。它们旨在与任一侧的单个TRUE
或FALSE
值一起使用,并使用短路评估:因此,如果在评估左侧后结果已知侧,右侧将不被评估。例如,无论
fn()
的值如何,都为FALSE
,因此不会对其求值。这在右侧可能会出错的测试中很有用,例如,因为
x + 1 > >如果
将给出错误。x
不是数字,0&
和|
运算符是矢量化版本。它们在两侧获取逻辑向量,并返回逻辑值向量。他们总是会评估双方。他们需要在类似的示例中执行此操作,因为即使已知结果为 false,长度也可能会根据调用
fn()
的结果而变化。在即将推出的 R 版本中,使用类似于您的示例的内容将是错误的,因为使用长度为 3 的向量的
&&
没有意义。There are two kinds of logical operators in R, vectorized and not vectorized. The
&&
and||
are not vectorized. They are intended to be used with singleTRUE
orFALSE
values on either side, and short-circuit evaluation is used: so if the result is known after evaluating the left-hand side, the right-hand side will not be evaluated. For example,is
FALSE
regardless of the value offn()
, so it won't be evaluated. This is useful in tests where the right-hand side might give an error, e.g.since
x + 1 > 0
will give an error ifx
is not numeric.The
&
and|
operators are the vectorized versions. They take vectors of logicals on both sides, and return a vector of logical values. They will always evaluate both sides. They need to do this in examples likebecause even though the result is known to be false, the length may change depending on the result of calling
fn()
.In upcoming versions of R, it will be an error to use something like your example, because it doesn't make sense to use
&&
with length 3 vectors.