在下面的示例中,逻辑向量!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
答案 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