【问题标题】:Native pipe placeholder [duplicate]本机管道占位符[重复]
【发布时间】:2022-01-13 00:00:34
【问题描述】:

我意识到这个问题之前已经被问过,但它没有点击。真的没有占位符吗?

例子:

my_mtcars <- mtcars %>% mutate(bla = c(1:nrow(.)))
my_mtcars$bla[10] <- NA
my_mtcars$bla[15] <- NA

作品:

# magritr pipe to return NA rows while debugging a df
my_mtcars %>% filter(!complete.cases(.)) %>% glimpse

不起作用:

# native piple equivilent
my_mtcars |> filter(!complete.cases(.)) |> glimpse()

用原生管道做我想做的事情的“正确”方法是什么?

【问题讨论】:

  • 我认为目前最“原生”的方式是linked 答案中的解决方案 2b:例如|&gt; {function(x) grepl("at", x)}()。请注意匿名函数后面的(),因为您必须调用该函数,而不仅仅是定义它
  • 小心你的括号/大括号 - my_mtcars |&gt; (\(x) filter(x, !complete.cases(x)))() |&gt; glimpse()
  • 也许这个例子可能会有所帮助,它需要设置环境变量 thelatemail 提到的。 1:5 |&gt; (\(.) .*2)() |&gt; x =&gt; (`&lt;&lt;-`)(y, x) |&gt; z =&gt; (`*`)(z, 2) * y

标签: r


【解决方案1】:

原生 R 管道不使用点。它总是插入到第一个参数中。要获得 dot 的效果,请定义一个函数,或者如果它在一开始就将其组合起来,重复输入(或将其分成两个管道并执行相同操作 - 未显示,因为此处不适用)。

library(dplyr)

mtcars |>
  (\(x) filter(x, complete.cases(x)))() |>
  summary()

f <- function(x) filter(x, complete.cases(x))
mtcars |> f() |> summary()

filter(mtcars, complete.cases(mtcars)) |> summary()

有时with 可用于创建解决方法。这将创建一个包含一个名为 x 的元素的列表,然后在管道的下一段中使用它。

mtcars |>
  list() |>
  setNames("x") |>
  with(filter(x, complete.cases(x))) |>
  summary()

请注意,您只能使用基本 R 来执行此操作 - Bizarro 管道不是真正的管道,但看起来像一个管道。

mtcars ->.;
  filter(., complete.cases(.)) ->.;
  summary(.)

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 2021-12-20
    • 2016-08-11
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多