为什么前三个函数(f2,f3,f4)仅在id = 1时返回y中的行,而f5返回y的所有行?
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
y <- tibble(id = c(1, 2))
f1 <- function(y, id) {
y %>% filter(.data$id == {{id}})
}
f2 <- function(id) {
f1(y, !!id)
}
f3 <- function(id) {
f1(y, {{id}})
}
f4 <- function(x) {
f1(y, x)
}
f5 <- function(id) {
f1(y, id)
}
f2(1)
#> # A tibble: 1 x 1
#> id
#> <dbl>
#> 1 1
f3(1)
#> # A tibble: 1 x 1
#> id
#> <dbl>
#> 1 1
f4(1)
#> # A tibble: 1 x 1
#> id
#> <dbl>
#> 1 1
f5(1)
#> # A tibble: 2 x 1
#> id
#> <dbl>
#> 1 1
#> 2 2
由reprex软件包(v0.3.0)创建于2020-11-15
如果您更改功能以显示其正在蒸发的内容,则可能更有意义
f1 <- function(y, id) {
print(rlang::quo_squash(quo(y %>% filter(.data$id == {{id}}))))
y %>% filter(.data$id == {{id}})
}
有了f5
,您得到
y %>% filter(.data$id == id)
因此,它将返回该列id
等于该列id
(即每一行)的所有行。
{{}}
从data.frame中选择列时,应使用。尝试指定文字data.value时没有用。
如果您将以下示例定义f1
为
f1 <- function(y, id) {
y %>% filter(.data$id == .env$id)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句