Database R sink()到数据库

Database R sink()到数据库,database,r,sink,Database,R,Sink,用于将错误记录到文件中,而无需将所有内容包装到tryCatch中。但是,我不想登录到文件,而是想登录到SQLite数据库表。这可能吗 更一般地说,对于sink,如何指定自己的函数来处理实际的写入过程?您可能需要capture.output。它允许您将给定命令的输出保存到变量,并对其执行任何操作: out <- capture.output({ i <- 1 cat(i, "\n") cat(i+1, "\n") }) 然后,您可以使用out变量存储到数据库中

用于将错误记录到文件中,而无需将所有内容包装到tryCatch中。但是,我不想登录到文件,而是想登录到SQLite数据库表。这可能吗

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

您可能需要capture.output。它允许您将给定命令的输出保存到变量,并对其执行任何操作:

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

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

您可以使用write.csvdf,file=~/df.csv,append=TRUE,将数据帧df输出为.csv,我认为这符合您的需要,因为大多数软件读取.csv。“附加”将您的新信息放在现有.csv文件的末尾,否则它将替换该文件

messups<-warnings()
write.csv(messups,file = "~/messups.csv",append=TRUE)
接收器转移到连接,而不是文件。要接收到DB表,只需使用写入数据库表的连接即可

dbc = dbconnection(host="mysql.example.com", table="logs",field="logtext")
这将打开到主机的数据库连接。然后你会:

sink(dbc)
print("stuff")
sink()
然后,数据库连接代码确实插入到日志中。例如,如果您想创建已盖销的日志条目,则在这里输入logtext值12-Jan-2001 R


因此,您所需要做的就是编写创建到数据库的连接的函数。我认为这必须在C级完成-我不知道您是否可以在纯R中创建新的连接类型。祝您好运。

为什么要特意避免使用正确的工具?有一个特定的包专门用来与SQLite db对话。使用它来编写自己的日志函数。为什么要坚持使用甚至不是通用函数的sink?@joran我想使用sink,因为它会自动记录错误/警告,不管它们是否得到处理。当然,我可以编写自己的日志函数,但接下来我必须将所有调用封装在tryCatch中,即tryCatchdodgyFunc,error=myloggingfunc与SQLite db进行sink talk将比编写自己的代码要复杂得多。