95-R分享08-bookdown的一些小知识点

2022-04-05 14:53:31 浏览数 (1)

  • 参考:
    • 1.4 Two rendering approaches | bookdown: Authoring Books and Technical Documents with R Markdown[1]

前言

发现一些不错的技巧,作为小小的分享。

两种bookdown作用形式

合并再编织(M-K):将不同的Rmd文件(不同章节)合并到一个Rmd 文件中(Merge),再将他们输出成一本书(knit)。

或是,编织再合并(K-M):将不同的Rmd文件先各自输出(knit),接着由bookdown 将他们合并成一本书(merge)。

这二者看似差别不大,实际上不同的设定却对最终结果有很大的影响。

M-K:

  • 不同章节中的R 环境,会继承到后续章节(按照代码顺序),包括使用的包、变量等等;
  • 不同章节中的代码块不可以有相同的名称;
  • 你可以自由管理Rmd 文件的位置,比如放在工作目录的其中某个子目录下。

K-M:

  • 各Rmd 代码彼此独立,互相的变量、环境中的函数、加载的包,互不干扰;
  • 不同章节中的代码块可以有相同的名称;
  • 必须将所有章节对应的Rmd 文件放在工作目录中。

默认下的bookdown 采用的是M-K 模式。

比如我们在编译时,就是先生成一个大的_main.Rmd 文件,其集合了所有的Rmd 文件代码:

如果你希望切换到K-M 模式:

  • new_session = TRUE when calling render_book()
  • set new_session: yes or new_session: true in the configuration file _bookdown.yml.

保存缓存

有时候可能有的代码块需要非常耗时的计算。

而有时候为了确保最终输出的书本没有排版问题,需要一遍遍knit 代码。这时候可以在代码块设置:

代码语言:javascript复制
```{r important-computing, cache=TRUE}

预览与实时预览书本

preview_chapter() 可以让你仅仅输出某一章节的内容。

serve_book() 可以让你获得一个动态变化的html bookdown 界面,可以让你实时预览因为代码改变,发生的页面变化。

比如:

代码语言:javascript复制
bookdown::preview_chapter("chap-name.Rmd", 
  output_format="bookdown::gitbook", encoding="UTF-8")

参考资料

[1]

1.4 Two rendering approaches | bookdown: Authoring Books and Technical Documents with R Markdown: https://bookdown.org/yihui/bookdown/new-session.html

0 人点赞