我有一个带有两个降价插图的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: >
%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: >
%VignetteEngine{knitr::knitr}
%VignetteIndexEntry{aaa_2}
%usepackage[UTF-8]{inputenc}
---
```{r}
print(a)
a2 <- a[, "hello"]
```
我得到与您使用标准R CMD build
和R CMD INSTALL
相同的结果,所以我猜devtools
正在使用引擎盖下的标准工具,或者试图模仿它们。我同意你的观点,这种情况不应该发生:插图应该是独立的。
如果我运行R CMD check
或devtools::check()
,它会发出警告:
> 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
所以我想这回答了你的问题:为了避免这种情况,确保你的包通过检查,没有警告或错误。