好吧,我想这真的很基本,但我对结果感到困惑。也许有人可以向我解释R如何解释我输入的内容。 我只是在R里玩,我想检查是否&和|按照我的预期工作,如“和”或“或”。这是我试过的:
x <- 1:10
y <- 7:-2
rbind(x, y, x&y>5, y&x>5, x|y>5)
这就是我得到的:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x 1 2 3 4 5 6 7 8 9 10
y 7 6 5 4 3 2 1 0 -1 -2
1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 0 1 1
1 1 1 1 1 1 1 1 1 1
所以我理解了我的错误,修改为“x&gt; 5&amp; y&gt; 5”和“x&gt; 5 | y&gt; 5”,并得到了我期望的结果。
但是有人可以向我解释一下R对我的初始输入有什么了解,以及为什么x&amp; y和y&amp; x甚至没有给出相同的结果!如果有人善意地指出它意味着什么?..
答案 0 :(得分:1)
与运算符优先级有关。 >
比&
更紧密。
因此,您的计算相当于x & (y > 5)
,在单词中,x
为非零且y
大于5。
答案 1 :(得分:0)
x&y>5
被解释为x
不是FALSE
和y>5
。请注意,0
将评估为FALSE
。
答案 2 :(得分:0)
嗯,请注意x&y
和y&x
做会给出相同的结果
all(x&y == y&x)
# [1] TRUE
添加>
部分时会出现差异。这与R中的运算符优先级有关。请参阅?Syntax
帮助页面了解操作顺序。事实证明>
的优先级高于&
,所以你真的在做
x&(y>5)
y&(x>5)
所以你会得到不同的结果。