#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
поэтому я думаю, что это ответ на ваш вопрос: чтобы избежать этого, убедитесь, что ваш пакет проходит проверку без предупреждений или ошибок.