首页 > 解决方案 > 按名称将变量传递给调用 dplyr 的函数?

问题描述

我正在尝试创建一个函数,该函数将从数据集中获取 2 个变量,并将它们的不同值并排映射,然后将输出写入 csv 文件。我将使用 dplyr 的 distinct 函数来获取唯一值。

map_table <- function(df, var1, var2){
  df_distinct <- df %>% distinct(var1, var2)
  write.csv(df_distinct, 'var1.csv')
}

map_table(iris, Species, Petal.Width)

1) map_table(iris, Species, Petal.Width) 不能产生我想要的。它应该产生 27 行数据,而不是我得到 150 行数据。

2)如何在输入var1后命名csv文件?所以如果 var1 = 'Sepal.Length',文件名应该是 'Sepal.Length.csv'

标签: rfunctiondplyrparameter-passingnon-standard-evaluation

解决方案


如果要传递不带引号的 col 名称,则需要使用非标准评估。(更多在这里

deparse(substitute())将为您提供文件输出的名称。

library(dplyr)

map_table <- function(df, var1, var2){

  file_name <- paste0(deparse(substitute(var1)), ".csv") # file name

  var1 <- enquo(var1) # non-standard eval
  var2 <- enquo(var2) # equo() caputures the expression passed, ie: Species

  df_distinct <- df %>% 
    distinct(!!var1, !!var2) # non-standard eval, !! tells dplyr to use Species

  write.csv(df_distinct, file = file_name)

}

map_table(iris, Species, Petal.Width)

推荐阅读