我有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变量周围的引号,但不起作用。有人可以帮助我吗?
答案 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()
组合将对象的名称作为字符串。