我想创建一个函数,该函数将数据集的名称作为第一个参数,将数据框中列名称的一部分作为第二个参数。然后,我想在函数中使用
glue
动态构造列名称,并在 mutate
调用中使用该列,如下所示:
library(tidyverse)
tmp <-
function(data, type){
var <- glue::glue("Sepal.{type}")
iris |>
select({{var}}) |>
mutate("{var}" := mean({{var}}))
}
我已经尝试了很多方法,但我很难找到一个解决方案,其中该列既被称为新列的名称(此处,
"{var}"
)又用于新列的计算(此处,mean({{var}})
)
)。遇到这种情况应该怎么办?
在这里,调用
tmp(iris, "Length")
应返回一个 150x1
data.frame,其中包含所有行的平均值。
tidyverse
解决方案是首选,或任何基于管道的答案。
我想你可以尝试
get(var)
或!!!rlang::syms({{var}})
,例如
tmp <- function(data, type) {
var <- glue::glue("Sepal.{type}")
data |>
select({{ var }}) |>
mutate("{var}" := mean(get(var)))
}
或
tmp <- function(data, type) {
var <- glue::glue("Sepal.{type}")
data |>
select({{ var }}) |>
mutate("{var}" := mean(!!!rlang::syms({{ var }})))
}