построить виньетку с помощью devtools::install_local — глобальные переменные, созданные в одной виньетке, доступны в другой

#r #r-markdown #devtools

Вопрос:

У меня есть пакет R с двумя виньетками с уценкой.

В первой виньетке под названием «aaa_1» я определяю переменную var . Во второй виньетке под названием «aaa_2» я использую переменную, созданную в первой виньетке.

При установке пакета с:

 devtools::install_local("package", build_vignette = TRUE)  

он строит две виньетки, но как это возможно? Почему переменная var доступна для второй виньетки? Я ожидал, что установка завершится неудачно, потому var что она не определена в «aaa_2». Являются ли переменные, определенные в виньетке, глобальными переменными?

И могу ли я что-то сделать, чтобы этого избежать?

Это проблема только потому, что виньетки создаются в алфавитном порядке. Если бы имена были в обратном порядке, установка завершилась бы неудачно. Две виньетки выглядят так:

«aaa_1»:


 title: "aaa_1" output: rmarkdown::html_vignette vignette: gt;  %VignetteEngine{knitr::knitr}  %VignetteIndexEntry{aaa_1}  %usepackage[UTF-8]{inputenc} ---   ```{r} a = data.frame(  "hello" = c("hi","hi", "hi"),  "goodbye" = c("bye", "bye", "bye") )  print(a)  ```  

«aaa_2»:


 title: "aaa_2" output: rmarkdown::html_vignette vignette: gt;  %VignetteEngine{knitr::knitr}  %VignetteIndexEntry{aaa_2}  %usepackage[UTF-8]{inputenc} ---  ```{r} print(a)  a2 lt;- a[, "hello"] ```  

Ответ №1:

Я получаю тот же результат , что и вы, используя стандарт R CMD build и R CMD INSTALL , поэтому я бы предположил devtools , что это использование стандартных инструментов под капотом или попытка их подражания. Я согласен с вами, этого не должно произойти: виньетки должны быть самодостаточными.

Если я запущу R CMD check или devtools::check() он выдаст предупреждение:

 gt; checking re-building of vignette outputs ... WARNING  Error(s) in re-building vignettes:  ...  --- re-building ‘Untitled2.Rmd’ using rmarkdown  --- finished re-building ‘Untitled2.Rmd’    --- re-building ‘aaa_1.Rmd’ using knitr  --- finished re-building ‘aaa_1.Rmd’    --- re-building ‘aaa_2.Rmd’ using knitr  Quitting from lines 11-14 (aaa_2.Rmd)   Error: processing vignette 'aaa_2.Rmd' failed with diagnostics:  object 'a' not found  --- failed re-building ‘aaa_2.Rmd’    SUMMARY: processing the following file failed:  ‘aaa_2.Rmd’    Error: Vignette re-building failed.  Execution halted  

поэтому я думаю, что это ответ на ваш вопрос: чтобы избежать этого, убедитесь, что ваш пакет проходит проверку без предупреждений или ошибок.