如何在R中使用带有magrittr的逻辑运算符(!)

时间:2014-08-17 00:27:08

标签: r magrittr

我正在获取值列表并尝试使用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

我的问题是,是否有不同的方法来做到这一点。包中还有其他别名选项,但我没有看到它们的任何示例。一个是“不”。也许我应该使用它呢?

我意识到我已经在某种程度上回答了我的问题,但我想知道是否可以在不必诉诸%>% !.的情况下完成。

3 个答案:

答案 0 :(得分:5)

您可以使用反引号将结果传递给运算符底层的函数:

> 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

答案 1 :(得分:5)

为什么不将否定移到前线"。这就是你通常否定%in% infix 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

答案 2 :(得分:4)

甚至

data.frame(data = c(1:2, NA, 4:5, NA, 7)) %>% 
  is.na %>% 
 `n'est pas`