R 用户函数列名称选择,带或不带引号

R user function column name selection with or without quotes

提问人:Andrew 提问时间:9/21/2022 最后编辑:aynberAndrew 更新时间:3/24/2023 访问量:510

问:

我希望能够在用户函数中输入 tibble 的列名,无论是否使用引号。使用下面的 myfunc 函数,我可以输入列名,但无法将其封装在“”中。有没有办法在单个用户定义的函数中使用这两种方法?

myfunc <- function(dat, col1){
  dat %>%
    mutate(col2 = {{ col1 }}+1)
}
# ok
myfunc(iris, Sepal.Length)

# error
myfunc(iris, "Sepal.Length")

dplyr 用户定义函数 引用 r-colnames

评论


答:

1赞 Maël 9/21/2022 #1

您可以使用 和 将字符变量转换为不带引号的变量,同时不更改已带引号的变量:as.namesubstitute

myfunc <- function(dat, col1){
  col1 <- as.name(substitute(col1))
  dat %>%
    mutate(col2 = {{col1}} + 1)
}

输出

all.equal(myfunc(iris, Sepal.Length), 
          myfunc(iris, "Sepal.Length"))
#[1] TRUE

评论

0赞 Andrew 9/21/2022
伟大。谢谢你,梅尔。知道如何一次处理 1 列以上吗?我尝试使用 map_df(c(“Sepal.Length”, “Sepal.Width”), ~myfunc(iris, .x)) 但出现错误“错误:!计算时出现问题。由错误引起:!找不到对象“.x””mutate()col2 = .x + 1