【问题标题】:How to pass the name of the dataframe to write_csv in dplyr如何将数据框的名称传递给 dplyr 中的 write_csv
【发布时间】:2018-04-06 19:53:57
【问题描述】:

我想用传递给write_csv 函数的数据帧的名称编写一个数据帧。例如,我通常会执行以下操作

iris %>% write_csv("iris.csv")

但我不想写文件名。我尝试了类似以下的方法

iris %>% write_csv(paste0(., ".csv"))

但我认为这将需要更多类似 quosure 的东西

【问题讨论】:

  • 该代码的结果是..csv 而不是iris.csv

标签: r


【解决方案1】:

只需定义您自己的自定义write.csv3

write.csv3 <- function(x, ...) {
  write.csv(x, file = paste0(deparse(substitute(x)), '.csv'), ...)
}
write.csv3(iris)

如果你想使用管道,那么你可以先设置一个属性name

write.csv3 <- function(x, ...) {
  write.csv(x, file = paste0(attr(x, "name"), '.csv'), ...)
}

attr(iris, "name") <- "iris" 
iris %>% write.csv3

或者您尝试应用this hacky 方法。

【讨论】:

  • 这确实有效,但我无法通过管道发送到write.csv3
  • 好的,我明白了。更新了我的答案。但是没有简单的方法可以解决这个问题。
【解决方案2】:

dplyr 管道中函数参数的基本用例是将函数参数视为一个名称,如下所示:

csv_save <- function(xx){
  csv_name = as.name(xx)
  iris %>% write.csv(.,file = !!csv_name)
}

csv_save("files.csv")

(未测试)

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 2017-09-12
    • 2019-07-30
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2015-03-27
    相关资源
    最近更新 更多