为什么当我们使用 &&或||两个逻辑向量之间仅返回 1 个元素

发布于 2025-01-12 00:32:45 字数 172 浏览 2 评论 0原文

我是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

方觉久 2025-01-19 00:32:45

R中有两种逻辑运算符,向量化和非向量化。 &&|| 未矢量化。它们旨在与任一侧的单个 TRUEFALSE 值一起使用,并使用短路评估:因此,如果在评估左侧后结果已知侧,右侧将不被评估。例如,

FALSE && fn()

无论 fn() 的值如何,都为 FALSE,因此不会对其求值。这在右侧可能会出错的测试中很有用,例如,

if (is.numeric(x) && x + 1 > 0)

因为 x + 1 > >如果 x 不是数字,0 将给出错误。

&| 运算符是矢量化版本。它们在两侧获取逻辑向量,并返回逻辑值向量。他们总是会评估双方。他们需要在类似的示例中执行此操作,

FALSE & fn()

因为即使已知结果为 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 single TRUE or FALSE 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,

FALSE && fn()

is FALSE regardless of the value of fn(), so it won't be evaluated. This is useful in tests where the right-hand side might give an error, e.g.

if (is.numeric(x) && x + 1 > 0)

since x + 1 > 0 will give an error if x 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 like

FALSE & fn()

because 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文