使用magrittr和否定运算符时结果不一致

3
> v <- c(1,2,NA,5)
> is.na(v)
[1] FALSE FALSE  TRUE FALSE
> !is.na(v)
[1]  TRUE  TRUE FALSE  TRUE
> 
> !is.na(v) %>% all()
[1] TRUE
> all(!is.na(v))
[1] FALSE
> (!is.na(v)) %>% all()
[1] FALSE

在没有括号的情况下,%>%is.na(v) 应用于 all() ,然后应用 ! 运算符。为什么它在这里有这样的操作顺序?我还应该注意哪些其他函数/运算符的操作顺序?
1个回答

2
magrittr提供了一组运算符,这些运算符与其链接方式更加匹配。因此,您可以使用
not(is.na(v)) %>% all()

建议是,在使用非 magrittr 操作符(+、-、$ 等)进行管道链时,需要特别注意操作符优先级会影响链的评估方式。通常建议使用 magrittr 提供的别名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接