我有一个玩具函数(用于说明使用),在函数中,我必须生成一个csv文件,结果如下:
# data #
df <- data.frame(ID = c(1, 2), Obs = c(1.0, 2.0), var=c(2.0,5.0))
df
ID Obs var
1 1 1 2
2 2 2 5
# version 1 function
disp <- function(df, c=NULL) {
if(!is.null(c)){
tab_res=data.frame(v1=df$ID*2,v2=df$Obs*3,v3=df$var*c)
}else{
tab_res=data.frame(v1=df$ID*2,v2=df$Obs*3,v3=df$var)
}
result=write.csv(tab_res,"test1.csv")
return(tab_res)
return(result)
}
# current output
disp(df,c=NULL)
v1 v2 v3
1 2 3 2
2 4 6 5
disp(df,c=1)
v1 v2 v3
1 2 3 2
2 4 6 5
disp(df,c=2)
v1 v2 v3
1 2 3 4
2 4 6 10
# it produced also a csv file with exacte tables
我需要的是每当我改变函数中的参数时,它将生成具有适当名称(由用户选择)的不同csv文件。这就是我所做的,它正在工作,但我想知道是否有任何其他有效的方法,此外,我没有看到csv文件中的列名(当我尝试将col.names
设置为TRUE时,它给了我一个错误)。
# modified function version 2
disp <- function(df, c=NULL, output_name) {
if(!is.null(c)){
tab_res=data.frame(v1=df$ID*2,v2=df$Obs*3,v3=df$var*c)
}else{
tab_res=data.frame(v1=df$ID*2,v2=df$Obs*3,v3=df$var)
}
result=write.csv(tab_res,"test1.csv")
csv_name <- paste0("test1_", output_name, ".csv")
result=write.table( tab_res,
file=csv_name,
append = T,
sep=',',
row.names=F,
col.names=F,
quote=T)
return(tab_res)
return(result)
}
disp(df,c=NULL,"no_c")
v1 v2 v3
1 2 3 2
2 4 6 5
# it produces a csv file test1_no_c
提前感谢您的帮助!
这里有一个解决方案,无论文件是否已经存在。使用file.exists
的返回值设置append
和col.names
的值
disp <- function(df, output_name, c = NULL) {
df$ID <- df$ID*2
df$Obs <- df$Obs*3
if(!is.null(c)){
df$var <- df$var*c
}
names(df) <- paste0("v", 1:3)
csv_name <- paste0("test1_", output_name, ".csv")
fexists <- file.exists(csv_name)
write.table(df, file = csv_name,
sep = ",",
append = fexists,
row.names = FALSE,
col.names = !fexists,
quote = TRUE)
df
}
disp(df, "no_c")
disp(df, "no_c", c = 1)
disp(df, "no_c", c = 2)