r中“!”和“-”的区别

dee*_*esh 2 r negation

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

 demo <- <dataframe>[!which(<dataframe>$<col_name> == 0),]
Run Code Online (Sandbox Code Playgroud)

但它没有给我正确的输出。

当我使用-在:

demo <- <dataframe>[-which(<dataframe>$<col_name>== 0),] 
Run Code Online (Sandbox Code Playgroud)

它给我带来了正确的答案。

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

小智 5

因此which将返回满足条件的行索引向量<dataframe>$<col_name> == 0,而不是逻辑(TRUE/FALSE)向量。因此,当你用 ! 来否定它时 你会胡言乱语。你本质上是在做这件事!c(0, 1, 2, 3, 4),它会返回TRUE FALSE FALSE FALSE FALSE.

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

或者你可以这样做: demo <- <dataframe>[!<dataframe>$<col_name> == 0,]