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