将data.frame写入CSV文件并使用theire变量名作为文件名

时间:2016-04-11 12:41:34

标签: r csv dataframe

我有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变量周围的引号,但不起作用。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

执行此操作的便捷方法是使用&#34;非标准评估&#34;。以下是这对您的情况有用:

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)

评估为&#34; df1&#34;该函数将数据帧写入名为&#34; df1.csv&#34;的文件中。

答案 1 :(得分:2)

问题是x的{​​{1}}参数需要数据帧,而write.csv参数必须是字符串。所以你有两个选择。

第一个选项:使用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()组合将对象的名称作为字符串。