【问题标题】:R notebook won't knit when data frame has been assigned from with sql chunk当使用 sql 块分配数据帧时,R 笔记本不会编织
【发布时间】:2017-05-06 12:53:15
【问题描述】:

我有一个 R 笔记本,我在其中使用 sql 块从数据库中读取数据,然后将其分配给数据框。然后我想在 R 笔记本中的 R 块中使用它,所以我在 sql 块中使用 output.vars 选项。

当我全部运行然后预览它时,它工作得很好,但是当我编织它时,我收到错误:“eval 中的错误(expr,envir,enclos):找不到对象'x'”。

以下是一些将重现此错误的简单代码:

---
title: "R Notebook"
output:
  html_notebook: default
  html_document: default
---

```{r setup}
library(DBI)
library(RSQLite)
db = dbConnect(SQLite(), dbname = "C:/R/chinook.db")
```

```{sql connection = db, output.vars = 'x'}
SELECT * FROM artists
```

```{r}
x[1:10,]
```

我正在使用:

  • R 版本 3.4.0 (2017-04-21)
  • 平台:i386-w64-mingw32/i386(32位)
  • 运行于:Windows 7 x64 (build 7601) Service Pack 1
  • RStudio 1.0.143
  • DBI_0.6-1
  • knitr_1.15.1

该示例使用来自 sqlitetutorial.net http://www.sqlitetutorial.net/download/sqlite-sample-database/?wpdmdl=94 的 SQLite 示例数据库。

我也尝试过不同类型的数据库,但都没有成功。

【问题讨论】:

    标签: r r-dbi rnotebook


    【解决方案1】:

    我认为你必须将output.vars 更改为output.var

    ```{sql connection = db, output.var = 'x'}
    SELECT * FROM artists
    ```
    

    这样对我有用。

    【讨论】:

    • 谢谢 Sraffa - 愚蠢的我。难以发现的是,当使用“output.vars”运行单个块时,单个块仍将数据帧传递给 R
    【解决方案2】:

    我不确定你中间的语法块是否有效。你为什么不喜欢:

    ```{r}
    library(DBI)
    library(RSQLite)
    db <- dbConnect(SQLite(), dbname = "C:/R/chinook.db")
    x <- dbGetQuery(db, 'SELECT * FROM artists')
    
    ```
    
    ```{r}
    x[1:10,]
    ```
    

    【讨论】:

    • 以防万一您觉得这很有趣,他们在knitr v. 1.14 中添加了一个 SQL 引擎,因此语法应该可以工作。我认为 OP 只是拼错了一个论点。
    • 谢谢。很高兴知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多