如何将逻辑运算符(!)与R中的magrittr一起使用
我正在使用magrittr获取一个值列表,并试图找到那些不是NA的值。下面是一个简单的例子:如何将逻辑运算符(!)与R中的magrittr一起使用,r,magrittr,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 =
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
给我
FUN中的错误(左、右):只能对数字、逻辑或复杂类型进行操作
经过多次试验,我偶然发现了一个有效的方法:
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
或者使用否定功能:
> 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
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`
好啊这是有道理的。这很管用,我还替换了`
`与不
一起使用,这同样有效。这就解释了别名的用途。Yesnot
被定义为函数(x)。Primitive(!”
,它与调用下面的函数相同代码>运算符。我还考虑添加…而不是作为别名,以使其真正具有表现力;)我喜欢这个答案,因为它将操作符放在您“期望”阅读它的位置,并且因为它显示了如何将操作符从magrittr
管道操作符中分离出来。这两个答案都很好。如果可以的话,我会接受这两种。更短的我喜欢这两个答案,但这是最干净的。如果否定是链中所需的最后一个操作,则此方法有效。