r - 按名称将变量传递给调用 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'
解决方案
如果要传递不带引号的 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)
推荐阅读
- asp.net - Web Deploy 发布 snk 文件
- sql-server - 找到每个部门第三高的薪水
- python - ShellExecuteEx 和 getexitcode 进程
- laravel - 如何在 laravel 容器中交换依赖项
- objective-c - iOS 13 是否需要自动布局?
- python - 如何根据最近的标识符将一个数据框的一列添加到另一个数据框?
- tar - 由于“无法将所有权更改为 uid 3434”,无法将 CircleCI 工作区从 Windows 附加到 Linux
- php - Grafana API 的 PHP 请求返回错误
- graph - 当我使用深度神经网络进行回归时,所有预测都接近中值
- php - 如何使用 generator.yml 更新表格内容?