sink()
对于将错误记录到文件中很有用,而不必将所有内容都包含在tryCatch
's. 但是,我不想记录到文件,而是想记录到(SQLite)数据库表。这可能吗?
更一般地说,sink()
我如何指定自己的函数来处理实际的写入过程?
sink
转移到一个connection
,而不是一个文件。要沉入数据库表,您只需使用写入数据库表的连接即可。
dbc = dbconnection(host="mysql.example.com", table="logs",field="logtext")
然后这会打开与主机的数据库连接。然后你做:
sink(dbc)
print("stuff")
sink()
然后数据库连接代码会执行 INSERT INTO logs (time,logtext) VALUES ("12-Jan-2001" "R output come here") - 例如,如果您想做带日期戳的日志条目。
因此,您需要做的就是编写创建connection
数据库的函数。我认为必须在 C 级别完成 - 我不知道您是否可以在纯 R 中创建新的连接类型。祝你好运。
你可能想要capture.output()
. 它允许您将给定命令的输出保存到变量中,并使用它做任何您想做的事情:
out <- capture.output({
i <- 1
cat(i, "\n")
cat(i+1, "\n")
})
然后,您可以使用out
变量存储到数据库等。
您可以使用 write.csv(df,file = "~/df.csv",append=TRUE),将数据框df作为我认为符合您需求的 .csv 文件(因为大多数软件读取 .csv)。Append 将您的新信息放在现有 .csv 的末尾,否则它将替换该文件。
messups<-warnings()
write.csv(messups,file = "~/messups.csv",append=TRUE)