【问题标题】:Running Code Chunks in R (knitr package)在 R 中运行代码块(knitr 包)
【发布时间】: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 &lt;- dbDriver("SQLite") con &lt;- dbConnect(RSQLite::SQLite(), ":memory:") dbListTables(con) 我已经在 Rnw 文件中发布了完整的代码,这有助于您尝试吗?
  • @hrbrmstr 你是什么意思?我的脚本顶部有这些库调用。 imgur.com/a/SlrEl 这就是它的样子,当我运行该块时,它工作正常。
  • 我现在尝试创建一个数据库,它在 knitr 中运行良好。我可以访问它并检索块中的结果。注意我多年来一直在使用 knitr 和 Rpostgres 和 sqldf 没有问题。抱歉,我没有忽略您的问题,但我无法重现它,所以很难提供帮助

标签: r knitr knitrbootstrap knitr-spin


【解决方案1】:

第二次测试

% 
\documentclass[a4paper]{article}
\title{test }
\begin{document}
<<db_create>>=
require("RSQLite")
sqlite <- dbDriver("SQLite")
db <- dbConnect(SQLite(), dbname="Test.sqlite")
dbSendQuery(conn = db,
    "CREATE TABLE School
               (SchID INTEGER,
        Location TEXT,
        Authority TEXT,
        SchSize TEXT)")
dbListTables(con)
dbSendQuery(conn = db,
    "INSERT INTO School
VALUES (1, 'urban', 'state', 'medium')")
dbSendQuery(conn = db,
    "INSERT INTO School
VALUES (2, 'urban', 'independent', 'large')")
dbSendQuery(conn = db,
    "INSERT INTO School
VALUES (3, 'rural', 'state', 'small')")
@

<<db_connect>>=

con <- dbConnect(RSQLite::SQLite(), "Test.sqlite")
dbListTables(con)
@
\end{document}

【讨论】:

  • 你必须原谅我,但你想让我怎么做?
  • 当然,它对你有用吗?我的意思是我刚刚测试了这个例子,它在 knitr 中运行良好?尝试 dbConnect(sqlite,"db/sqlite/table.db") 时,它在 knitr 和外部都失败了。还是因为我使用了 sweave 而不是 markdown 是一个问题?
  • 嗯,我猜那是因为你没有 db/sqlite/table.db 文件,对吧?
  • 是的,显然是这样。但是,我们如何测试来帮助您呢?顺便说一句,我会删除我无用的帖子:-)
  • 我已将其替换为第二个示例,以防它对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多