如何从项目的 renv 库中的 Rmd 文件中停止 rmarkdown::render()?
How can I stop rmarkdown::render() from Rmd files inside project's renv library?
我有一个使用默认 blogdown::build_site()
路由编译的 Hugo 博客。
我决定尝试 renv::
,因为我的一些 post 情节很重,而且容易依赖旧包版本,所以为什么不确保未来完整的站点重建不会造成问题吧?考虑到这一点,我决定使用 renv
的最佳方式是让每个博客 post(在 /content/post/
中)成为自己的 renv
项目。由于 renv
使用的全局库缓存,这甚至不会造成太大的存储损失。
现在博客无法编译,因为 rmarkdown::render()
(由 build_site()
为每个博客 post 调用)似乎遍历了每个博客的整个树 post 寻找 Rmd 文件,当然还会在 renv
库文件夹中发现一些文件,愉快地尝试编译它们——但不出所料地失败了。
所以我的问题是
- 把每个博客post放在自己的
renv
环境下是不是有悖于惯例(刚开始学renv和朋友们)?
- 如果不是,为什么
build_site()
和 renv
玩得不好?我错过了什么吗?还是我发现了一个善意的问题?或者我应该放手并切换到 manual blogdown site-building method?
这个问题似乎微不足道(我们只需要阻止 render()
遍历 /renv/
目录),但据我所知,blogdown 和 renv 之间的这种相互作用似乎还未被探索(我'我只找到了一些切线 related ,所以我想我可以先在这里寻求建议。
我的网站是使用 Rscript -e "blogdown::build_site(local=FALSE)"
构建的(不使用 RStudio 中的按钮)。一旦此脚本开始在 renv
库树中呈现 Rmd 文件,它最终会失败:
$ Rscript -e "blogdown::build_site(local=FALSE)"
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/blogdown/resources/2015-07-23-r-rmarkdown.Rmd
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/01-intro.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '01-intro.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Warning message:
The label(s) intro, methods not found
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/02-literature.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '02-literature.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/03-method.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '03-method.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/04-application.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '04-application.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/05-summary.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '05-summary.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/06-references.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '06-references.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/index.Rmd
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/cli/doc/pluralization.Rmd
Quitting from lines 15-15 (./../man/chunks/pluralization.Rmd)
Error in file(con, "r") : cannot open the connection
Calls: local ... call_block -> lapply -> FUN -> knit -> readLines -> file
In addition: Warning message:
In file(con, "r") :
cannot open file './../man/chunks/pluralization.Rmd': No such file or directory
Execution halted
Error in render_page(f) :
Failed to render 'content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/cli/doc/pluralization.Rmd'
Calls: <Anonymous> -> build_rmds -> render_page
Execution halted
这是我的会话信息:
> sessionInfo()
R version 3.6.2 (2019-12-12)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.6.2 htmltools_0.4.0 tools_3.6.2 rstudioapi_0.11
[5] yaml_2.2.1 Rcpp_1.0.4.6 rmarkdown_2.1 knitr_1.28
[9] digest_0.6.25 xfun_0.13 packrat_0.5.0 rlang_0.4.5
[13] renv_0.9.3 evaluate_0.14
至于我问题的第二部分,blogdown::build_site()
source code 提供了明确的答案。
build_site()
调用 list_rmds()
,它执行以下操作(从源中逐字复制,很容易跟进):
list_rmds = function(dir, check = FALSE) {
files = list.files(dir, rmd_pattern, recursive = TRUE, full.names = TRUE)
# exclude Rmd that starts with _ (preserve these names for, e.g., child docs)
# but include _index.Rmd/.md
files = files[!grepl('^_', basename(files)) | grepl('^_index[.]', basename(files))]
# do not allow special characters in filenames so dependency names are more
# predictable, e.g. foo_files/
if (check) bookdown:::check_special_chars(files)
files
}
可以看出它递归地列出了所有个Rmd文件,然后排除了以[=14=]开头的Rmd文件。
基于此,很明显为什么renv::
在 renv 目录中渲染 Rmd 文件。同样清楚的是,使用 packrat::
不会有任何区别。
解决这个问题的方法当然是使用自定义站点构建脚本,如 blogdown 文档中所述,但我仍然想知道默认方法是否不支持 blogdown 和 renv 的组合(假设其他人喜欢将每篇博文放在自己的 renv 项目中)。
我有一个使用默认 blogdown::build_site()
路由编译的 Hugo 博客。
我决定尝试 renv::
,因为我的一些 post 情节很重,而且容易依赖旧包版本,所以为什么不确保未来完整的站点重建不会造成问题吧?考虑到这一点,我决定使用 renv
的最佳方式是让每个博客 post(在 /content/post/
中)成为自己的 renv
项目。由于 renv
使用的全局库缓存,这甚至不会造成太大的存储损失。
现在博客无法编译,因为 rmarkdown::render()
(由 build_site()
为每个博客 post 调用)似乎遍历了每个博客的整个树 post 寻找 Rmd 文件,当然还会在 renv
库文件夹中发现一些文件,愉快地尝试编译它们——但不出所料地失败了。
所以我的问题是
- 把每个博客post放在自己的
renv
环境下是不是有悖于惯例(刚开始学renv和朋友们)? - 如果不是,为什么
build_site()
和renv
玩得不好?我错过了什么吗?还是我发现了一个善意的问题?或者我应该放手并切换到 manual blogdown site-building method?
这个问题似乎微不足道(我们只需要阻止 render()
遍历 /renv/
目录),但据我所知,blogdown 和 renv 之间的这种相互作用似乎还未被探索(我'我只找到了一些切线 related
我的网站是使用 Rscript -e "blogdown::build_site(local=FALSE)"
构建的(不使用 RStudio 中的按钮)。一旦此脚本开始在 renv
库树中呈现 Rmd 文件,它最终会失败:
$ Rscript -e "blogdown::build_site(local=FALSE)"
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/blogdown/resources/2015-07-23-r-rmarkdown.Rmd
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/01-intro.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '01-intro.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Warning message:
The label(s) intro, methods not found
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/02-literature.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '02-literature.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/03-method.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '03-method.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/04-application.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '04-application.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/05-summary.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '05-summary.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/06-references.Rmd
[WARNING] This document format requires a nonempty <title> element.
Defaulting to '06-references.utf8' as the title.
To specify a title, use 'title' in metadata or --metadata title="...".
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/bookdown/rstudio/templates/project/resources/index.Rmd
Rendering content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/cli/doc/pluralization.Rmd
Quitting from lines 15-15 (./../man/chunks/pluralization.Rmd)
Error in file(con, "r") : cannot open the connection
Calls: local ... call_block -> lapply -> FUN -> knit -> readLines -> file
In addition: Warning message:
In file(con, "r") :
cannot open file './../man/chunks/pluralization.Rmd': No such file or directory
Execution halted
Error in render_page(f) :
Failed to render 'content/post/2016-11-18-notes-inorganic-chemistry/renv/library/R-3.6/x86_64-pc-linux-gnu/cli/doc/pluralization.Rmd'
Calls: <Anonymous> -> build_rmds -> render_page
Execution halted
这是我的会话信息:
> sessionInfo()
R version 3.6.2 (2019-12-12)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.6.2 htmltools_0.4.0 tools_3.6.2 rstudioapi_0.11
[5] yaml_2.2.1 Rcpp_1.0.4.6 rmarkdown_2.1 knitr_1.28
[9] digest_0.6.25 xfun_0.13 packrat_0.5.0 rlang_0.4.5
[13] renv_0.9.3 evaluate_0.14
至于我问题的第二部分,blogdown::build_site()
source code 提供了明确的答案。
build_site()
调用 list_rmds()
,它执行以下操作(从源中逐字复制,很容易跟进):
list_rmds = function(dir, check = FALSE) {
files = list.files(dir, rmd_pattern, recursive = TRUE, full.names = TRUE)
# exclude Rmd that starts with _ (preserve these names for, e.g., child docs)
# but include _index.Rmd/.md
files = files[!grepl('^_', basename(files)) | grepl('^_index[.]', basename(files))]
# do not allow special characters in filenames so dependency names are more
# predictable, e.g. foo_files/
if (check) bookdown:::check_special_chars(files)
files
}
可以看出它递归地列出了所有个Rmd文件,然后排除了以[=14=]开头的Rmd文件。
基于此,很明显为什么renv::
在 renv 目录中渲染 Rmd 文件。同样清楚的是,使用 packrat::
不会有任何区别。
解决这个问题的方法当然是使用自定义站点构建脚本,如 blogdown 文档中所述,但我仍然想知道默认方法是否不支持 blogdown 和 renv 的组合(假设其他人喜欢将每篇博文放在自己的 renv 项目中)。