【发布时间】:2017-12-15 20:37:49
【问题描述】:
我正在处理我收到的一个降价文件,它希望使用我以前从未使用过的 knitr 包将一些脚本编写成代码块。
我遇到的问题是脚本在放置在块中时似乎无法正常工作,但是当我在该上下文之外运行它们时工作正常。
例子:
sqlite <- dbDriver("SQLite")
con <- dbConnect(sqlite,"db/sqlite/table.db")
这行得通。
```{r db_connect}
sqlite <- dbDriver("SQLite")
con <- dbConnect(sqlite,"db/sqlite/table.db")
```
这不起作用。这是错误的回溯:
Error in rsqlite_connect(dbname, loadable.extensions, flags, vfs) : Could
not connect to database: unable to open database file
8. stop(structure(list(message = "Could not connect to database:\nunable to open database file", call = rsqlite_connect(dbname, loadable.extensions, flags, vfs), cppstack = structure(list(file = "", line = -1L, stack = "C++ stack not available on this system"), .Names = c("file", ...
7. rsqlite_connect(dbname, loadable.extensions, flags, vfs)
6. initialize(value, ...)
5. initialize(value, ...)
4. new("SQLiteConnection", ptr = rsqlite_connect(dbname,loadable.extensions, flags, vfs), dbname = dbname, flags = flags, vfs = vfs, loadable.extensions = loadable.extensions, ref = new.env(parent = emptyenv()))
3. .local(drv, ...)
2. dbConnect(sqlite, "db/sqlite/table.db")
1. dbConnect(sqlite, "db/sqlite/table.db")
有人对如何解决此问题有任何建议吗?
【问题讨论】:
-
您可能在 R 脚本环境中调用了
library(),并且您需要在 Rmd 中调用相同的library()(通常靠近顶部,并且从不缓存)。 -
我试图重现您的错误,并在 knitr 内部和外部获取它。我不确定这是与加载库相关的问题,这会产生以下错误:找不到函数“dbDriver”
-
在 knitr 中尝试使用默认参数
require("RSQLite") sqlite <- dbDriver("SQLite") con <- dbConnect(RSQLite::SQLite(), ":memory:") dbListTables(con)我已经在 Rnw 文件中发布了完整的代码,这有助于您尝试吗? -
@hrbrmstr 你是什么意思?我的脚本顶部有这些库调用。 imgur.com/a/SlrEl 这就是它的样子,当我运行该块时,它工作正常。
-
我现在尝试创建一个数据库,它在 knitr 中运行良好。我可以访问它并检索块中的结果。注意我多年来一直在使用 knitr 和 Rpostgres 和 sqldf 没有问题。抱歉,我没有忽略您的问题,但我无法重现它,所以很难提供帮助
标签: r knitr knitrbootstrap knitr-spin