尝试使用文件名中的变量写入CSV时出错(但如果不使用函数则没有错误)

时间:2016-06-23 18:14:19

标签: r csv

我创建了一个函数clean_to_CSV(df),它接收数据框,清除它,将其吐出来,并将其写入CSV,使用输入的数据集名称使用CSV文件名:

clean_to_CSV <- function(df) {
    # df <- # code that cleans the df (runs with no errors)
    write.csv(df, file = paste0(deparse(substitute(df)), "_clean.csv"),  row.names = FALSE)
    df
}

然而,这会返回:

Error in file(file, ifelse(append, "a", "w")) : 
invalid 'description' argument
In addition: Warning messages:
3: In if (file == "") file <- stdout() else if (is.character(file)) { :
the condition has length > 1 and only the first element will be used

这非常令人费解,因为1)采用完全相同的 write.csv ...行并运行外部,该功能完美无缺。此外,我知道写入CSV并返回df不会相互干扰。最后,我确实查看了相关的SO帖子,但它们要么是更复杂的问题,要么没有可靠的答案。没有一个如此简单的情况,其中一行代码在函数外部但不在函数内部。

1 个答案:

答案 0 :(得分:0)

应用清理代码(注释掉的部分)后,df具有不同的表示形式,不再具有作为参数值时的名称。

要修复此问题,只需在输入函数后立即捕获对象的名称,然后再引用该值即可。这是一个例子。

clean_to_CSV <- function(df) {
    obj_name = deparse(substitute(df))
    # df <- # code that cleans the df (runs with no errors)
    write.csv(df, file = paste0(obj_name, "_clean.csv"),  row.names = FALSE)
    df
}