Bru*_*uno 5 r dplyr magrittr tidyverse
我正在努力使用 %>% margritr 将东西从 dplyr 传递到函数过滤器中的另一个参数。
我认为这应该有效:
library(dplyr)
library(margritr)
d <- data.frame(a=c(1,2,3),b=c(4,5,6))
c(2,2) %>% filter(d, a %in% .)
Run Code Online (Sandbox Code Playgroud)
但我明白了:
# Error in UseMethod("filter_") :
# no applicable method for 'filter_' applied to an object of class "c('double', 'numeric')"
Run Code Online (Sandbox Code Playgroud)
我希望它以与此相同的方式工作:
filter(d, a %in% c(2,2))
# a b
# 1 2 5
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
管道旨在在您传递它时围绕其第一个参数组合函数。当你想规避这种行为时,你可以生成一个更灵活的匿名环境。你用花括号来做这件事,就像你在写一个函数一样。
5 %>%
{filter(iris, Sepal.Length == .)}
Run Code Online (Sandbox Code Playgroud)
对于为什么这有效,写作{somefunctions(x, y)}
等同于写作function(...) {somefunctions(x, y)}
。所以上面的函数忽略了它的参数,而只是评估它环境中的变量。该.
代名词通过管道为它定义,并搜索其他变量(如iris
)在全球环境中。
归档时间: |
|
查看次数: |
1415 次 |
最近记录: |