“之间的区别&引用;及&引用;在r

“之间的区别&引用;及&引用;在r,r,negation,R,Negation,这里是一个代码片段,我正在尝试使用: demo <- <dataframe>[!which(<dataframe>$<col_name> == 0),] 它给了我正确的答案 有人能解释为什么会这样吗?它返回一个索引,可用于对数据帧(或其他任何内容)进行正/负索引。但是位置向量将仅返回FALSEs。试试!5。以下是一些例子: df <- data.frame(col1=1:6, col2=rep(0:1, 3)) > df col1 c

这里是一个代码片段,我正在尝试使用

 demo <- <dataframe>[!which(<dataframe>$<col_name> == 0),]
它给了我正确的答案


有人能解释为什么会这样吗?

它返回一个索引,可用于对
数据帧
(或其他任何内容)进行正/负索引。但是
位置向量将仅返回
FALSE
s。试试
!5
。以下是一些例子:

df <- data.frame(col1=1:6, col2=rep(0:1, 3))
> df
  col1 col2
1    1    0
2    2    1
3    3    0
4    4    1
5    5    0
6    6    1

# an vector of positions
> which(df$col2 == 0)
[1] 1 3 5

# ! this vector
> !which(df$col2 == 0)
[1] FALSE FALSE FALSE

# - this vector
> -which(df$col2 == 0)
[1] -1 -3 -5
df
col1 col2
1    1    0
2    2    1
3    3    0
4    4    1
5    5    0
6    6    1
#位置向量
>其中(df$col2==0)
[1] 1 3 5
# ! 这个向量
> !其中(df$col2==0)
[1] 假假假假
#-这个向量
>-其中(df$col2==0)
[1] -1 -3 -5

返回一个索引,该索引可用于对
数据帧(或任何其他内容)进行正向/反向索引。但是
位置向量将仅返回
FALSE
s。试试
!5
。以下是一些例子:

df <- data.frame(col1=1:6, col2=rep(0:1, 3))
> df
  col1 col2
1    1    0
2    2    1
3    3    0
4    4    1
5    5    0
6    6    1

# an vector of positions
> which(df$col2 == 0)
[1] 1 3 5

# ! this vector
> !which(df$col2 == 0)
[1] FALSE FALSE FALSE

# - this vector
> -which(df$col2 == 0)
[1] -1 -3 -5
df
col1 col2
1    1    0
2    2    1
3    3    0
4    4    1
5    5    0
6    6    1
#位置向量
>其中(df$col2==0)
[1] 1 3 5
# ! 这个向量
> !其中(df$col2==0)
[1] 假假假假
#-这个向量
>-其中(df$col2==0)
[1] -1 -3 -5

由于返回的内容:

> !which(x = mtcars$cyl == 4)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

> -which(x = mtcars$cyl == 4)
 [1]  -3  -8  -9 -18 -19 -20 -21 -26 -27 -28 -32
还值得注意的是:

identical(mtcars[!mtcars$cyl == 4, ],
+         mtcars[mtcars$cyl != 4, ])
[1] TRUE

因为返回的内容:

> !which(x = mtcars$cyl == 4)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

> -which(x = mtcars$cyl == 4)
 [1]  -3  -8  -9 -18 -19 -20 -21 -26 -27 -28 -32
还值得注意的是:

identical(mtcars[!mtcars$cyl == 4, ],
+         mtcars[mtcars$cyl != 4, ])
[1] TRUE

因此,
which
将返回满足
$==0
的行索引向量,而不是逻辑(真/假)向量。因此,当你用否定的话!你胡说八道。您实际上是在做这个
!c(0,1,2,3,4)
返回
TRUE-FALSE

-
符号将删除
which
语句返回的行,这是您想要的

或者,您可以:
demoSo
which
将返回满足
$==0
的行索引向量,而不是逻辑(真/假)向量。因此,当你用否定的话!你胡说八道。您实际上是在做这个
!c(0,1,2,3,4)
返回
TRUE-FALSE

-
符号将删除
which
语句返回的行,这是您想要的

或者,您可以:
demo让我们以向量为例:

x <- c(1, 10, 30, 5)
但是如果我使用
(求反运算符)在
哪个(b)
上而不是
-
(命令将变成
x[!哪个(b)]
),结果将完全错误,这是因为求反运算符可以应用于整数而不返回错误:如果整数等于0,它将返回TRUE,如果整数与0不同,它将返回
FALSE
(请尝试
!(-2:2)

因此,如果我想通过使用
得到正确的结果,我需要将它直接应用于布尔向量

x[ !b ]

让我们以向量为例:

x <- c(1, 10, 30, 5)
但是如果我使用
(求反运算符)在
哪个(b)
上而不是
-
(命令将变成
x[!哪个(b)]
),结果将完全错误,这是因为求反运算符可以应用于整数而不返回错误:如果整数等于0,它将返回TRUE,如果整数与0不同,它将返回
FALSE
(请尝试
!(-2:2)

因此,如果我想通过使用
得到正确的结果,我需要将它直接应用于布尔向量

x[ !b ]

对不起,这是很基本的<代码>
是逻辑求反,
-
是(在本例中)一元算术运算。如果应用
为整数值
0
强制为
FALSE
,所有其他数字强制为
TRUE
:尝试
!(0:5)
。那么[which($!=0),]这会给我一个正确的答案吗?当然会。您知道R提供逻辑、整数和字符子集吗?你知道哪个是什么吗?对不起,这是很基本的<代码>
是逻辑求反,
-
是(在本例中)一元算术运算。如果应用
为整数值
0
强制为
FALSE
,所有其他数字强制为
TRUE
:尝试
!(0:5)
。那么[which($!=0),]这会给我一个正确的答案吗?当然会。您知道R提供逻辑、整数和字符子集吗?你知道
哪个
做什么吗?如果没有行返回,你会得到
数据[-integer(0),]
,这会把事情搞砸。。。这就是为什么
which
是个坏主意。如果没有行返回,您将得到
数据[-integer(0),]
,这将真正把事情搞砸。。。这就是为什么
这是个坏主意。现在它清楚了,我把“!”符号当作否定。现在它清楚了,我把“!”符号当作否定。