0

这个问题与将变量传递给使用 `enquo()` 的函数有关。

我有一个更高的函数,其中包含 tibble ( dat) 的参数和 dat () 中感兴趣的列variables_of_interest_in_dat。在该函数中,有一个对我想要传递的另一个函数的调用variables_of_interest_in_dat

higher_function <- function(dat, variables_of_interest_in_dat){
    variables_of_interest_in_dat <- enquos(variables_of_interest_in_dat)

    lower_function(dat, ???variables_of_interest_in_dat???)
    }
    
lower_function <- function(dat, variables_of_interest_in_dat){
    variables_of_interest_in_dat <- enquos(variables_of_interest_in_dat)
       
    dat %>%
         select(!!!variables_of_interest_in_dat)
    }

传递variables_of_interest_in_dat给 lower_function 的推荐方法是什么?

我已经尝试过lower_function(dat, !!!variables_of_interest_in_dat),但是当我运行higher_function(mtcars, cyl)它时会返回“错误:无法!!!在顶层使用”。

在相关帖子中,higher_function 在将变量传递给 lower 函数之前没有对变量进行 enquo。

谢谢

4

1 回答 1

4

这是你想要的吗?

library(tidyverse)

LF <- function(df,var){
      newdf <- df %>% select({{var}})
      return(newdf)
    }

HF <- function(df,var){
  LF(df,{{var}})
}

LF(mtcars,disp)  
HF(mtcars,disp)

( {{}}aka 'curly curly') 运算符替换了引用的方法enquo()

于 2021-09-29T11:11:09.433 回答