dplyr NSE:将数据框中的多列居中

hli*_*nee 2 r dplyr non-standard-evaluation rlang

我试图使用 dplyr 在数据框中“居中”多个列,但我不断收到“二元运算符的非数字参数”评估错误。我认为这是因为当我的函数需要一个裸变量名时我试图传递一个字符串。但是,使用 syms() 函数没有帮助。

center <- function(var) {
  var <- enquo(var)
  var_ctrd <- paste0(quo_name(var), "_ctrd")
  dataset <- dataset %>% 
    group_by(Gender) %>% 
    mutate(!! var_ctrd := !! var - mean(!! var, na.rm = TRUE))
}

# Pull out character vector of modifier names
mod_names <- dataset %>% 
  select(NeckLengthCm:FlexExtDiff_Peak_abs) %>% 
  colnames()

# Iterate over modifiers
walk(syms(mod_names), center)
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题或者是否有更好的解决方案?

TCl*_*lle 5

您可以使用mutate_at()变量名称向量来居中变量子集

# Only center a subset
vars <- colnames(mtcars)[1:4]

mtcars %>% 
  mutate_at(vars, scale, scale = FALSE)
Run Code Online (Sandbox Code Playgroud)