假设我们有以下数据:
tib <- tibble::tibble(x = 1:10)
然后,假设我们想要创建一个函数,该函数接受一列作为输入,并返回带有几个添加列的tibble
,如下所示:
library(dplyr)
generate_transformations <- function(data, column){
transform <- sym(column)
data %>%
mutate(
sqrt = sqrt(!!transform),
recip = 1 / !!transform,
log = log(!!transform)
)
}
# Usage is great:
tib %>%
generate_transformations('x')
# A tibble: 10 x 4
x sqrt recip log
<int> <dbl> <dbl> <dbl>
1 1 1 1 0
2 2 1.41 0.5 0.693
3 3 1.73 0.333 1.10
4 4 2 0.25 1.39
5 5 2.24 0.2 1.61
6 6 2.45 0.167 1.79
7 7 2.65 0.143 1.95
8 8 2.83 0.125 2.08
9 9 3 0.111 2.20
10 10 3.16 0.1 2.30
现在我的问题是,有没有办法避免重复引用(!!
)transform
?
是的,我可以,例如,暂时重新命名column
,然后在我完成后重新命名它,但这不是我对这个问题的兴趣.
如果有一种方法可以产生一个不需要!!
的变量,我很感兴趣.
当它是does not work的时候,我在寻找类似的东西:
generate_transformations <- function(data, column){
transform <- !!sym(column) # cannot unquote here :(
data %>%
mutate(
sqrt = sqrt(transform),
recip = 1 / transform,
log = log(transform)
)
}