【问题标题】:Write data.frame to CSV file and use theire variable name as file name将 data.frame 写入 CSV 文件并使用它们的变量名作为文件名
【发布时间】:2016-08-01 15:12:29
【问题描述】:

我有 3 个数据框,df1、df2、df3。我需要将这些 df 转换为 csv 文件。所以,我在函数的帮助下使用如下 write.csv。

    hiveq <- function(f_name){
        f_name
        write.csv(f_name,file=paste(f_name,".csv",sep=""),row.names = FALSE, col.names = FALSE)}
hiveq("df1")
hiveq("df2")
hiveq("df3")

当我打开 csv 表时,它只显示 df1,而不是 df1 的内容。我怎么能对 R 说,它应该看作 Df 而不是字符串。我尝试使用 as.name、gsub、as.formula 删除 f_name 变量周围的引号,但不起作用。有人可以帮我吗?

【问题讨论】:

  • 或许你可以使用?get
  • 你需要区分df的名称和它的内容。上面的代码没有这样做。

标签: r csv dataframe


【解决方案1】:

一种方便的方法是使用“非标准评估”。以下是在您的情况下的工作方式:

hiveq <- function(df) {
  write.csv(df, file = paste(deparse(substitute(df)),".csv",sep=""), row.names = FALSE, col.names = FALSE)
}
hiveq(df1)
hiveq(df2)
hiveq(df3)

这里发生的是表达式deparse(substitute(df)) 返回一个字符串,其中包含传递给df 的R 对象的名称。所以当你打电话时:

hiveq(df1)

计算结果为“df1”,该函数将数据帧写入名为“df1.csv”的文件。

【讨论】:

  • 我注意到,如果我们在带有 data.frame 列表的 lapply 调用中调用函数“hiveq”,此方法将失败。为什么会有这种行为?
【解决方案2】:

问题是write.csvx 参数需要一个数据帧,而file 参数必须是一个字符串。所以你有两个选择。

第一个选项:使用get() 从名称中查找数据框:

hiveq <- function(d, env = parent.frame()) {
    write.csv(get(d, env = env),
              file = paste0(d,".csv"),
              row.names = FALSE)
}
hiveq("df1")

您需要将此处的env 参数设置为parent.frame(),否则get() 将不得不解决在何处查找对象的歧义。

第二个选项:提供数据框并使用非标准评估提取其名称:

hiveq <- function(d) {
    write.csv(d,
              file = paste0(deparse(substitute(d)), ".csv"),
              row.names = FALSE)
}
hiveq(df1)

总而言之,get() 会为您提供该名称下的对象,而deparse(subtitute()) 组合将对象名称作为字符串获取。

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2013-02-04
    • 2015-06-26
    相关资源
    最近更新 更多