首页 > 解决方案 > 分配一个 R 对象来运行命令链

问题描述

我正在学习使用bookdown从同一个 Rmd 文件同时呈现 PDF 和 Word 文档。由于我想使用 来查看 PDF 输出Sumatra PDF reader,它无法自动重新加载电子书 UI 中显示的文档的修改文档(请参阅ReloadModified Documentshttps://www.sumatrapdfreader.org/settings.html 。当我渲染 PDF 文件并在 Sumatra PDF 阅读器中查看它时,我创建了一行来运行,如下所示:

bookdown::render_book('index.Rmd',output_format = 'all',new_session = TRUE,preview=TRUE);
system('cmd.exe',input='taskkill /IM SumatraPDFPortable.exe');
system('cmd.exe',input='"C:/PortableApps/SumatraPDFPortable/SumatraPDFPortable.exe" "E:/output.pdf"')

我想知道是否可以为该行分配一个 R 对象(例如:rendernow),以便每次我键入“rendernow”并进入 R 控制台时,都会执行上述行。

谢谢!

标签: rcommandshortcut

解决方案


让它成为一个函数:

rendernow <- function() {
  bookdown::render_book('index.Rmd',output_format = 'all',new_session = TRUE,preview=TRUE);
  system('cmd.exe',input='taskkill /IM SumatraPDFPortable.exe');
  system('cmd.exe',input='"C:/PortableApps/SumatraPDFPortable/SumatraPDFPortable.exe" "E:/output.pdf"')
}

然后你可以通过调用它rendernow()(所以你需要括号)


只是为了好玩,这里有一个不需要括号的解决方案:

rendernow <- structure("", class = "rendernow")
print.rendernow <- function(x, ...) {
  bookdown::render_book('index.Rmd',output_format = 'all',new_session = TRUE,preview=TRUE);
  system('cmd.exe',input='taskkill /IM SumatraPDFPortable.exe');
  system('cmd.exe',input='"C:/PortableApps/SumatraPDFPortable/SumatraPDFPortable.exe" "E:/output.pdf"')
}

然后您只需键入rendernow并调用您的步骤。


推荐阅读