R使功能对标准和非标准评估都很稳健

时间:2016-01-21 11:28:01

标签: r dataframe dplyr nse

我有一个小功能,可以搜索依赖于column的数据框的用户定义的dplyr。在下面的当前表单中,它接受非标准评估中的列参数 - 在标准评估中没有引号(例如scenario而不是"scenario"

search_column <- function(df, column, string, fixed = TRUE){
      df <- dplyr::select_(df, deparse(substitute(column)))
      df <- distinct(df)

      return(grep(string, df[[1]], fixed = fixed, value = TRUE))
    }

无论用户输入列名如何,即在标准或非标准评估中,是否有办法使函数有效?

1 个答案:

答案 0 :(得分:4)

我建议只删除由deparse添加到字符串输入的其他引号,在这种情况下,它将产生相同的输出,并且您的代码将适用于任何输入

比较3种可能的输入

gsub('"', "", deparse(substitute("mpg")))
[1] "mpg"
gsub('"', "", deparse(substitute('mpg')))
[1] "mpg"
gsub('"', "", deparse(substitute(mpg)))
[1] "mpg"

所以解决办法可能就是将第一行修改为

df <- dplyr::select_(df, gsub('"', "", deparse(substitute(column))))