我想要自动化一些数据导出工作,并且我希望在每个文件的头部添加一些内容,例如“请引用Bob和Jane 2008年的资料”或根据具体情况添加几行特定的指示。
我已经查看了write.csv和write.table文档,但是没有看到任何这样的功能。
那么,怎样最轻松地实现这个功能呢?
write.table(...,append = T)
和cat
write.table
时使用append=T
,之前使用cat
添加标题包装成自己的函数...
write.table_with_header <- function(x, file, header, ...){
cat(header, '\n', file = file)
write.table(x, file, append = T, ...)
}
write.csv
调用中,将忽略append
,因此您只需要调用
write.table_with_header(x,file,header,sep=',')
这将导致生成csv文件。
(感谢@flodel提供的建议)
my.write <- function(x, file, header, f = write.csv, ...){
# create and open the file connection
datafile <- file(file, open = 'wt')
# close on exit
on.exit(close(datafile))
# if a header is defined, write it to the file (@CarlWitthoft's suggestion)
if(!missing(header)) writeLines(header,con=datafile)
# write the file using the defined function and required addition arguments
f(x, datafile,...)
}
write.csv
或write.table
或任何功能,并使用文件连接,该连接(如@ flodel在评论中指出的那样)仅会打开和关闭一次文件,并自动追加。因此,它更有效率!file
和 close
打开和关闭文件连接。否则,您将打开和关闭文件两次,这有点低效。通过已打开的连接,您始终在进行追加操作,因此不需要 append = TRUE
,而可以使用 write.csv
。 - flodelif(!missing(header)) writelines(headder,con=datafile)
。然后你可以将它命名为 "mywrite" :-) 而不是 "write.with.header.maybe"。 - Carl Witthoft
writeLines
添加标题,然后使用选项append=TRUE
的write.csv
写入数据。 - DrDomwrite.csv
,append
被忽略并自动设置为F
,请改用write.table, sep = ','
。 - mnel