对于summing !is.na()结果的行为

14

第一行为什么返回TRUE,而第三行返回1?我期望两行都返回1。第三行中那两个额外的括号的确切含义是什么?

!is.na(5) + !is.na(NA)
# TRUE
(!is.na(5)) + (!is.na(NA))
# 1

编辑:应该检查这些内容多次。最初的问题是在使用!is.na()时出现的,尽管认为相同的问题也会发生在is.na()中,但实际上并没有发生 :)


没有确认,最初的问题是与!is.na()有关的。现在再试一下 :) - Xachriel
2
这同样适用于 !TRUE + !FALSE(!TRUE) + (!FALSE)。也就是说,这与 is.na 没有关系。 - TooTone
@Xachriel,既然您在这里还比较新,您可能想阅读一下关于常见问题解答,了解StackOverflow的工作方式。如果您收到了解决您问题的答案(您有一个很棒的答案!!!),请通过点击小复选框接受它或者给一个有用的答案点个赞来使StackOverflow对每个人都更有价值。您完全没有义务这样做,但如果答案确实解决了您的问题,这是回馈网站的好方法。谢谢! - Simon O'Hanlon
1个回答

21

2
“+1”意味着你可能会得到奇怪的结果,比如说:“!TRUE + FALSE 等于 FALSE”,“FALSE + !TRUE 等于 0”。这让我感到非常头痛。 - thelatemail
4
对于Lisp程序员:codetools::showTree(quote(!is.na(5) + !is.na(NA))) 翻译为:显示代码树形结构,其中包含以下代码 !is.na(5) + !is.na(NA) - kohske
6
无论使用何种语言,都可以使用额外的一些括号来避免歧义。 - Carl Witthoft
@Carl 我认为那是一个非常糟糕的指导方针。冗余的括号会引入视觉混乱,需要权衡其增加的明确性。对于基本操作(类似于BODMAS,但是针对程序员),冗余的括号会对可读性产生负面影响。 - Konrad Rudolph
3
De gustibus non disputandam.(拉丁语)意为“不可以争论味觉喜好”。一个合格的编辑应该提供颜色或其他突出显示方式来匹配括号。我理解可读性问题,因此不建议过度使用括号。另外一点:代码经常需要从一种语言移植到另一种语言。每当存在非标准或非直观的优先级时,使用括号有很大帮助。 - Carl Witthoft

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