我意识到这个问题之前已经被问过,但没有点击。真的没有占位符吗?
例子:
my_mtcars <- mtcars %>% mutate(bla = c(1:nrow(.)))
my_mtcars$bla[10] <- NA
my_mtcars$bla[15] <- NA
Run Code Online (Sandbox Code Playgroud)
作品:
# magritr pipe to return NA rows while debugging a df
my_mtcars %>% filter(!complete.cases(.)) %>% glimpse
Run Code Online (Sandbox Code Playgroud)
不起作用:
# native piple equivilent
my_mtcars |> filter(!complete.cases(.)) |> glimpse()
Run Code Online (Sandbox Code Playgroud)
我尝试使用本机管道执行的操作的“正确”方法是什么?
本机 R 管道不使用点。它总是插入到第一个参数中。要获得点定义函数的效果,或者如果它位于开头,请自己重复输入将其组合起来(或将其分成两个管道并执行相同的操作 - 未显示,因为此处不适用)。
library(dplyr)
mtcars |>
(\(x) filter(x, complete.cases(x)))() |>
summary()
Run Code Online (Sandbox Code Playgroud)
或者
f <- function(x) filter(x, complete.cases(x))
mtcars |> f() |> summary()
Run Code Online (Sandbox Code Playgroud)
或者
filter(mtcars, complete.cases(mtcars)) |> summary()
Run Code Online (Sandbox Code Playgroud)
有时with可用于创建解决方法。这将创建一个包含一个名为 x 的元素的列表,然后在管道的下一段中使用该元素。
mtcars |>
list() |>
setNames("x") |>
with(filter(x, complete.cases(x))) |>
summary()
Run Code Online (Sandbox Code Playgroud)
请注意,您可以仅使用基本 R 来完成此操作 - Bizarro 管道,它不是真正的管道,但看起来像管道。
mtcars ->.;
filter(., complete.cases(.)) ->.;
summary(.)
Run Code Online (Sandbox Code Playgroud)
由于这个问题出现,R 添加了一个 _ 占位符,因此该with示例可以缩短为:
# needs R 4.2 or later
mtcars |>
list(x = _) |>
with(filter(x, complete.cases(x))) |>
summary()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |