我无法将带有spin
注释的R脚本编译为HTML / PDF。
这是MWE:
#' ---
#' output:
#' html_document:
#' toc: true
#' toc_float: true
#' pdf_document:
#' toc: true
#' jupyter:
#' jupytext:
#' text_representation:
#' extension: .R
#' format_name: spin
#' format_version: '1.0'
#' jupytext_version: 0.8.4
#' kernelspec:
#' display_name: R
#' language: R
#' name: ir
#' language_info:
#' codemirror_mode: r
#' file_extension: .r
#' mimetype: text/x-r-source
#' name: R
#' pygments_lexer: r
#' version: 3.6.0
#' ---
#+ setup, include=F, echo=F
knitr::opts_chunk$set(collapse=T)
#+ error=T
.3 <- 5
#' some text
#+ error=T
for <- 5
该脚本是从运行R内核的Jupyter Notebook创建的。转换是使用jupytext
完成的。
构建因以下错误而失败:
Error in parse(text = x, keep.source = TRUE) :
<text>:122:5: unexpected assignment
121: #+ error=T
122: for <-
^
Calls: <Anonymous> -> <Anonymous> -> getParseData -> parse
Execution halted
这是R车间的摘录,代表错误的变量命名,因此可能会出现错误。因此,error=T
块选项。
最让我感到困惑的是(i)该脚本较早编译就没有问题(上一次成功构建是在2018年12月5日;到目前为止尚未尝试重建),并且(ii).3 <- 5
是同样错误,但R仅抱怨第二行。
我正在使用以下方法将文档编译为HTML
Rscript -e 'rmarkdown::render("filename.R", output_format = "html_document")'
在R v3.6和4.14.113-1-MANJARO
Linux上运行,knitr
是v1.22,rmarkdown
是v1.12(根据sessionInfo
)。
答案 0 :(得分:0)
区别在于.3 <- .5
在语法上是正确的,而for <- 5
不是。
其中第一个会生成运行时错误。通常,分配的左侧可以是表达式,这就是解析x[1] <- 3
之类的方式的过程。只是并非在评估时允许所有表达式。
for <- 5
行不可解析(因为for
是保留字),因此在解析时会发生错误。如您所见,通常会通过诸如“意外...”之类的消息来指示语法错误:
Error in parse(text = x, keep.source = TRUE) :
<text>:122:5: unexpected assignment
121: #+ error=T
122: for <-
^
如果您注意到行号,则这是要解析的文本的第122行。也许在knitr
的早期版本中,解析是逐块完成的,但是现在在评估任何部分之前就已经解析了整个文件:并且该行将不被解析。
如果您将整个内容写为Rmd文件,则会得到以前的行为,因为在其中 的这些块一次被解析:
---
output:
html_document:
toc: true
toc_float: true
---
```{r setup, include=F, echo=F}
knitr::opts_chunk$set(collapse=T)
```
```{r error=T}
.3 <- 5
```
some text
```{r error=T}
for <- 5
```