在 mutate 调用中使用胶水的动态名称

问题描述 投票:0回答:1

我想创建一个函数,该函数将数据集的名称作为第一个参数,将数据框中列名称的一部分作为第二个参数。然后,我想在函数中使用

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
解决方案是首选,或任何基于管道的答案。

r dplyr dynamic-programming
1个回答
0
投票

我想你可以尝试

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 }})))
}
© www.soinside.com 2019 - 2024. All rights reserved.