为什么在R中逻辑运算符只有一个参数时会否定其参数?

6

当只向逻辑与/或运算符传递单个向量时,该运算符会否定该参数:

> x = c(F,T,T)
> `&`(x)
[1]  TRUE FALSE FALSE

> `|`(x)
[1]  TRUE FALSE FALSE

为了使逻辑运算符成为幂等操作,需要将单个元素向量作为第二个参数传递:
> `&`(x,T)
[1] FALSE  TRUE  TRUE

> `|`(x,F)
[1] FALSE  TRUE  TRUE

当只有一个参数传递时,为什么逻辑运算符会否定它们的参数?


你可能会认为“无效的一元运算符”是更合适的响应,例如 *(3) - Mike Wise
2
你使用的是哪个R版本?因为在你的一元示例中,我只得到了Error in |x: 1 argument passed to '|' which requires 2 - lord.garbage
对我来说“工作”(例如,我遇到了奇怪的否定行为),我正在使用版本0.98.1103。 - Mike Wise
这很可能是您的 Rstudio 版本问题。当前的 R 版本是 3.x.x 的主版本。 - lord.garbage
我在 x86_64, darwin13.4.0 的 OSX 上使用的是 R version 3.1.2 (2014-10-31) - Mert Nuhoglu
我使用的是 R 3.1.2 版本,这意味着 PR#16385 可能已经被应用了。这个补丁修复了这个问题。很奇怪你仍然遇到这个问题。 - lord.garbage
1个回答

7

@Pascal 这是 <3.2.1 版本的行为。在当前的 R 版本中,你应该会得到上面评论中提到的错误:https://dev59.com/9Yzda4cB1Zd3GeqPjC0b#30951871?noredirect=1#comment49937120_30951729 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接