繁体   English   中英

如何将管道变成不平等?

[英]How to feed pipe into an inequality?

这已经出现在多个实例中,我不知道这个当前实例是否适用于我出现的许多情况,但我希望答案可能会有所启发。

最简单的版本是当我进行一些数据处理并想要对管道的结果进行评估时。 一个简单的例子是:

> seq(9) %>% > 4
Error: unexpected '>' in "seq(9) %>% >"
> seq(9) %>% . > 4
Error in .(.) : could not find function "."

期望的输出将是逻辑矢量

FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE

在许多情况下,我想评估一些管道输出,但必须分配它,然后执行评估才能工作:

seq(9) -> vec
vec > 4

有没有办法完全在管道链中完成这些类型的评估?

如果您只想使用管道,则需要使用花括号。

seq(9) %>% {. > 4}

[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

我推荐使用purrr如果你要管道这些东西,因为它会导致更易读的代码。

library(purrr)

map_lgl(seq(9), ~.x > 4)

[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

还有一个选择是将>函数称为函数而不是运算符:

> seq(9) %>% `>`(4)
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
> seq(9) %>% '>'(4)
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

我认为反引号最有意义,但是在这种情况下,常规引号也可以。

magrittr提供“别名”来将二元运算符转换为可管道的函数。 我自己并不关心他们,但你可以这样做

library(magrittr)
seq(9) %>% is_greater_than(4)

请参阅完整列表?add (这是+的别名)。 +[[

在稍微宽泛的背景下,使用mutate可以轻松完成:

library(dplyr)
data_frame(x=1:9) %>% mutate(big_x = x>4)

未经请求的观点 :如果您主要使用原子载体,我怀疑整流/管道方法会比它的价值更麻烦。 正如另一个答案所暗示的,你可以使用purrr ,但同样,基础R可以很好地工作。 更多问题的背景可能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM