我创建了一个函数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帖子,但它们要么是更复杂的问题,要么没有可靠的答案。没有一个如此简单的情况,其中一行代码在函数外部但不在函数内部。
答案 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
}