2014-09-23 80 views
1

好吧,我想这是非常基本的,但我对结果感到困惑。也许有人可以向我解释R如何解释我输入的内容。 我只是在R玩,我想检查是否&和|像我期望的那样工作,如“和”或“或”。这里是我的尝试:合并&(AND)和| (或)与>比较

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> 5 & Y> 5” 和“x> 5 | Y > 5“,并得到我期望的结果。

但是有谁能向我解释R对我的初始输入的理解,以及为什么x和y & x甚至没有给出相同的结果!如果有人还跟指出这是什么意思?..

+1

这并不奇怪行为 – 2014-09-23 15:17:32

回答

1

这是关于运算符优先级>绑定比&更严格。

所以你的计算相当于x & (y > 5)其中,在字的装置,x是非零和y大于5

+0

行!谢谢!就像我说的那样,它肯定是很简单的,但我不明白如何以及为什么。 – Yamazaki 2014-09-23 16:08:42

0

x&y>5被解释为xFALSEy>5。请注意0​​将评估为FALSE

0

好,注意x&yy&x给出了相同的结果

all(x&y == y&x) 
# [1] TRUE 

当您添加>部件时会出现差异。这与R中的运算符优先级有关。请参阅?Syntax帮助页面以了解操作顺序。事实证明,>的优先级高于&所以你真的做

x&(y>5) 
y&(x>5) 

所以你会得到不同的结果。