我有一个像这样的向量vec,我想检查向量中是否有任何向下的步骤。我这样做使用:
any(diff(vec) < 0)
# [1] FALSE
没有台阶。好的。但是当我尝试在管道中使用这段代码时,我得到一个TRUE和一个警告:
library(magrittr)
vec %>% diff() %>% any(. < 0)
# [1] TRUE
# Warning message:
# In any(., . < 0) : coercing argument of type 'double' to logical
如何正确地将any(diff(vec) < 0)
写成管道?
4条答案
按热度按时间5hcedyr01#
你已经有了一些解决方案,但没有解释。原始版本不起作用的原因是
magrittr
管道在嵌套函数调用中对.
的处理方式不同。通过嵌套函数调用,我的意思是
.
不是管道目标函数的参数。在any(. < 0)
中,该函数是any()
,其参数是. < 0
,这实际上是对<
函数的函数调用。因此.
处于“嵌套函数调用”中。如果
.
仅在嵌套函数调用中,则它也隐式地用作第一个参数,因此代码被视为
要抑制这种奇怪的行为,请将表达式放在大括号中,即你的例子会是
4szc88ey2#
你可以试试
或
或
n6lpvg4x3#
使用magrittr管道:
使用基管:
查看更多信息:https://stackoverflow.com/a/72474832/16730940
g6ll5ycj4#
基地
马格里特尔