2

sink()对于将错误记录到文件中很有用,而不必将所有内容都包含在tryCatch's. 但是,我不想记录到文件,而是想记录到(SQLite)数据库表。这可能吗?

更一般地说,sink()我如何指定自己的函数来处理实际的写入过程?

4

3 回答 3

4

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 中创建新的连接类型。祝你好运。

于 2013-12-16T17:34:15.753 回答
1

你可能想要capture.output(). 它允许您将给定命令的输出保存到变量中,并使用它做任何您想做的事情:

out <- capture.output({
    i <- 1
    cat(i, "\n")
    cat(i+1, "\n")
})

然后,您可以使用out变量存储到数据库等。

于 2013-12-16T16:49:53.477 回答
0

您可以使用 write.csv(df,file = "~/df.csv",append=TRUE),将数据框df作为我认为符合您需求的 .csv 文件(因为大多数软件读取 .csv)。Append 将您的新信息放在现有 .csv 的末尾,否则它将替换该文件。

messups<-warnings()
write.csv(messups,file = "~/messups.csv",append=TRUE)
于 2013-12-16T16:52:30.023 回答