添加两个从逻辑强制转换为数字的向量

时间:2014-06-11 22:46:06

标签: r

在下面的示例中,逻辑向量!is.na(X)!is.na(Y)通过预乘以整数强制转换为数字,然后添加。但结果看起来好像“+”被解释为异或。任何人都可以解释为什么会这样吗?

set.seed(1)
X <- sample(c(NA,1),10,replace=T)
Y <- sample(c(NA,1),10,replace=T)

2*!is.na(X)                # numeric, as expected
#  [1] 0 0 2 2 0 2 2 2 2 0
2*!is.na(Y)                # numeric, as expected
#  [1] 0 0 2 0 2 0 2 2 0 2
2*!is.na(X) + 2*!is.na(Y)  # huh?
#  [1] 0 0 0 2 0 2 0 0 2 0

# but this works...
xx <- 2*!is.na(X)
yy <- 2*!is.na(Y)
xx+yy
#  [1] 0 0 4 2 2 2 4 4 2 2

# as does this...
as.numeric(2*!is.na(X)) + 2*!is.na(Y)
#  [1] 0 0 4 2 2 2 4 4 2 2

# and this...
2*(!is.na(X)) + 2*(!is.na(Y))
#  [1] 0 0 4 2 2 2 4 4 2 2

在新的会话中运行。 R版本3.0.3(2014-03-06),Win 7 x64

1 个答案:

答案 0 :(得分:2)

这可能是你所期待的:

 (2*!is.na(X)) + (2*!is.na(Y))
 #[1] 0 0 4 2 2 2 4 4 2 2

你的解析如下:

 2*!( is.na(X) + 2*!is.na(Y) )
 [1] 0 0 0 2 0 2 0 0 2 0