将 R 对象分配给 运行 个命令链

assigning an R object to run a chain of command

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

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 控制台时,上面的行将是已执行。

谢谢!

就让它成为一个函数:

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 即可调用您的步骤。