【问题标题】:Include an SQL code chunk into R script to be converted to a Markdown report将 SQL 代码块包含到 R 脚本中以转换为 Markdown 报告
【发布时间】:2019-09-24 19:24:37
【问题描述】:

我想在 RMarkdown 报告中包含一个 SQL 代码块。我不打算在其中实际运行任何 SQL 代码,因此该块将具有 eval=FALSE,例如:

```{sql, eval=FALSE}
select * from mtcars
where car = 'abc'
```

现在,我通常使用 R 脚本中的 rmarkdown::render 生成 R Markdown 报告(而不是直接运行 *.Rmd),如 here 所述。是否可以将 SQL 代码块包含到 R 脚本中以转换为 Markdown 报告?这是我天真地用来实现我需要的东西:

#+ sql, eval=FALSE
select * from mtcars
where car = 'abc'

这只需要在不运行它的情况下显示一个很好地突出显示的代码,但渲染失败。我收到以下错误:

解析错误(文本 = x,keep.source = TRUE)::88:15: 意外符号

似乎这样做的唯一方法是将 SQL 代码注释掉:

#+
# select * from mtcars
# where car = 'abc'

但我想在我的报告中正确突出显示代码。这在我描述的设置中是否可行?

【问题讨论】:

  • @JimG 我想你没有理解我的问题。我想将一个 SQL 代码加入到 R 脚本中并编译它。
  • 编译SQL?我没听错吗?
  • @JimG 从包含一些 SQL 代码的 R 脚本生成 R Markdown 报告
  • 不完全确定你发生了什么,你的代码对我有用 rmarkdown::render 没有注释掉。

标签: r r-markdown


【解决方案1】:

在旧版本的rmarkdown 中,您的代码运行良好,无需任何更改。但是,在最近的版本中,它会抛出您提到的错误。一种对我有用的方法是在查询之前和之后使用反引号。此外,设置engine = 'sql' 将添加格式。

#+ sql, eval = FALSE,  engine = 'sql'
`SELECT * FROM mtcars
WHERE car = 'abc'`

【讨论】:

  • 谢谢,效果很好。这可能是一个错误(或我们不知道的预期行为)。
【解决方案2】:

根据@user2554330's answer,尝试使用mysql 关键字而不是sql 关键字。

```{mysql eval=FALSE}
select * from mtcars
where car = 'abc'
```

原因:

  • 如果您使用mysql 关键字,降价引擎将尊重eval=FALSE

【讨论】:

  • 这很有用,但无关紧要。我的问题是是否可以将 SQL 代码包含到 R 脚本中并使用 rmarkdown::render 进行编译。
  • “无关紧要”还是只是“烦人”? (我不同意后者。)(在同一个链接答案中,one of the comments 来自knitr 的作者,建议使用```sql 而不是```{sql eval=FALSE},也许你可以使用它。我'我目前无法测试,但他的评论暗示它不会执行。)
  • @r2evans sql 即使在Rmd 文件中使用eval=FALSE 对我来说也能正常工作。但同样,这不是我要询问的。
  • @JimG 您能否删除您的答案,因为它没有解决问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多