我正在尝试在数据库中运行一些R代码。 其中大部分进展顺利,但我似乎偶然发现了一个错误。 我无法加载以下包,这是我的一些代码的依赖项。 WGCNA
我一直在追逐它,这似乎是由于尝试加载GO.db时出错。
我收到以下错误:
Error in .local(conn, statement, ...) :
Unable to execute statement 'SELECT * FROM tmp_test();'.
Server says '!Error running R expression. Error message: Error in as.data.frame((function() { : '.
进一步挖掘它似乎是由于以下声明:
dbconn <- dbFileConnect(dbfile)
错误可以使用:
重现functionDef <- paste(
"CREATE FUNCTION tmp_test() ",
"RETURNS TABLE(output STRING)",
"LANGUAGE R ",
"{",
"library(AnnotationDbi)",
"datacache <- new.env(hash=TRUE, parent=emptyenv())",
"pkgname <- 'GO.db'",
"libname <- .libPaths()[1]",
"dbfile <- system.file('extdata', 'GO.sqlite', package=pkgname, lib.loc=libname)",
"assign('dbfile', dbfile, envir=datacache)",
"dbconn <- dbFileConnect(dbfile)",
"};", sep = "\n")
dbGetQuery(conn, functionDef)
dbGetQuery(conn, "SELECT * FROM tmp_test();")
顺便说一下,从MonetDB中安装GO.db就可以了。 并且可以使用以下R代码完成:
source("https://bioconductor.org/biocLite.R")
biocLite("GO.db")
非常感谢有关如何解决此问题的提示。
至于datachache应该在这里做什么,这是我调试工作的一部分。该代码是GO.db包中zzz.R的一部分。另一种产生此错误的方法是尝试加载GO.db包。
我尝试了HannesMühleisen的代码,得到以下结果: 我首先重启了monetdbd。
dbGetQuery(conn,“SELECT * FROM tmp_test()”) QQ:'SELECT * FROM tmp_test()'.local(conn,statement,...)中的错误: 无法执行语句'SELECT * FROM tmp_test()'。服务器说 '!运行R表达式时出错。错误消息:错误 dbConnect(SQLite(),dbname = dbfile,cache_size = 64000,synchronous = “关闭”,:'。
然后我再次尝试并得到了这个错误:
dbGetQuery(conn,“SELECT * FROM tmp_test()”)QQ:'SELECT * FROM tmp_test()'.local中的错误(conn,statement,...):无法执行 执行语句'SELECT * FROM tmp_test()'。服务器说'!错误 运行R表达式。错误消息:错误 as.data.frame((function(){:'。
重启monetdbd后,我可以重现这个循环。
答案 0 :(得分:0)
我按照以下方式工作:
首先,我简化了示例代码,删除了显然未使用的datacache
并使用system.file
而不是手动搜索文件名。
其次,您的函数需要实际返回您在模式中定义的内容,在本例中为STRING
。
functionDef <- "CREATE FUNCTION tmp_test() RETURNS TABLE(output STRING) LANGUAGE R {
library(AnnotationDbi)
dbfile <- system.file('extdata/GO.sqlite', package='GO.db')
dbconn <- dbFileConnect(dbfile)
return('Hello, World')
}"
假设安装了GO.db和AnnotationDbi软件包,这对我来说很好用:
> dbGetQuery(conn, "SELECT * FROM tmp_test()")
output
1 Hello, World