Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用not运算符“”进行子集设置`_R_Operators_Subset - Fatal编程技术网

R 使用not运算符“”进行子集设置`

R 使用not运算符“”进行子集设置`,r,operators,subset,R,Operators,Subset,我刚刚在not中遇到了一个有趣的细微差别运算符 退房: y <- 1:10 y[!y] integer(0) y[4] <- NA y[!y] [1] NA y[6] <- 0 y[!y] [1] NA 0 y您没有使用等分法进行子集设置,而是将数值1:10强制为逻辑值,而0以外的任何数值都强制为TRUE。运行,例如 !(1:10) # [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 得到1

我刚刚在not
中遇到了一个有趣的细微差别运算符

退房:

y <- 1:10
y[!y]
integer(0)
y[4] <- NA
y[!y]
[1] NA
y[6] <- 0
y[!y]
[1] NA  0

y您没有使用等分法进行子集设置,而是将数值
1:10
强制为逻辑值,而0以外的任何数值都强制为
TRUE
。运行,例如

!(1:10)
#  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
得到10
FALSE
s,因此当你用10
FALSE
s子集长度为10的any向量时,什么也得不到

?TRUE
?NA
中所述,与
NA
进行逻辑比较会产生
NA

当然,0被强制为
FALSE
,所以
!0
强制为TRUE,因此当您将第6个元素设置为0时

 !c(1:5, 0, 7:10)
 # [1] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
 #         1     2     3     4     5  ^^^6     7     8     9    10
您在第6个位置得到一个
TRUE
,因此使用它进行子集设置将返回第6个元素

0和NA怎么都不是y


您可能正在查找
y[y!=y]

0在逻辑运算(布尔代数)中被解释为FALSE。 !0 = !(假)=真

同样,非0有效(即非NA)数值在逻辑运算中被解释为TRUE


NAs总是很棘手,请参见上面Frank的评论。

我认为,任何在
NA
上运行的操作都是
NA
。我怀疑这是个骗局。这是我的data.table变体,如果你感兴趣的话:我想这是最好的问答。不确定你是否认为这是个骗局:不。。。检查此
长度(NA);长度(真);y[NA];是的
哦,对了。也许OP的意思是
-y
,而不是
!可能是弗兰克。我认为OP的意思是
y[y!=y]
,否则一半的混淆是由于使用
y
作为向量和子集的索引,无论是使用
-y
还是
!y
@Frank我本想用我的方式将其细分。akrun使用了Gregor在我链接的问题中提到的逻辑替换。它很聪明。“我只是想理解其中的逻辑。”普拉福特:哦,我错过了上面的链接,因为我阅读能力很差;感谢您的澄清:)就我个人而言,我会将“这个问题”链接起来,而不是添加“链接”或“点击这里”,以使其更加突出。顺便说一句,一个可能非常重要的区别是:你的问题实际上与@akrun的评论无关。您询问的是子服务商
`[`
,而他使用赋值人
`[@plafort Yeah,引用Gregor的话:
是。numeric(NA_integer);(NA_integer)
是一个反例。