Использование функции вращения {knitr} игнорирует параметры чанка - PullRequest
0 голосов
/ 11 мая 2019

У меня проблемы с компиляцией 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

Сценарий был создан из записной книжки Jupyter с ядром R. Преобразование было сделано с использованием 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) этот сценарий был скомпилирован ранее без проблем (последняя успешная сборка была 5 декабря 2018 года; до сих пор не пробовал перестраивать), и (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).

1 Ответ

0 голосов
/ 11 мая 2019

Разница в том, что .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
```

enter image description here

...