我正在获取一个值列表,并尝试使用magrittr找到那些不是NA的值。这是一个简单的例子:
data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% is.na
这会产生正确的结果:
data
[1,] FALSE
[2,] FALSE
[3,] TRUE
[4,] FALSE
[5,] FALSE
[6,] TRUE
[7,] FALSE
当我把not运算符 !
在前面 is.na
,我收到一个错误:
data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% !is.na
给我
Error in FUN(left, right) : operations are possible only for numeric, logical or complex types
经过多次试验,我偶然发现了这一点,这有效:
data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% is.na %>% !.
data
[1,] TRUE
[2,] TRUE
[3,] FALSE
[4,] TRUE
[5,] TRUE
[6,] FALSE
[7,] TRUE
我的问题是,是否有不同的方法来做到这一点。包中还有其他别名选项,但我没有看到它们的任何示例。一个是“不”。也许我应该使用它呢?
我意识到我已经在某种程度上回答了我的问题,但我想知道这是否可以在不必诉诸的情况下完成 %>% !.
最后。
为什么不把否定移到“前线”。这就是你通常否定的方式 %in%
中缀operatiuon
!data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% is.na
data
[1,] TRUE
[2,] TRUE
[3,] FALSE
[4,] TRUE
[5,] TRUE
[6,] FALSE
[7,] TRUE
为什么不把否定移到“前线”。这就是你通常否定的方式 %in%
中缀operatiuon
!data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% is.na
data
[1,] TRUE
[2,] TRUE
[3,] FALSE
[4,] TRUE
[5,] TRUE
[6,] FALSE
[7,] TRUE
您可以使用反引号将结果传递给运算符底层的函数:
> data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% is.na %>% `!`
data
[1,] TRUE
[2,] TRUE
[3,] FALSE
[4,] TRUE
[5,] TRUE
[6,] FALSE
[7,] TRUE
或者使用 Negate
功能:
> data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% Negate(is.na)()
data
[1,] TRUE
[2,] TRUE
[3,] FALSE
[4,] TRUE
[5,] TRUE
[6,] FALSE
[7,] TRUE
甚至
data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>%
is.na %>%
`n'est pas`