【问题标题】:Rmarkdown directing output file into a directoryRmarkdown将输出文件定向到目录
【发布时间】:2015-05-07 19:20:34
【问题描述】:

我发现 knitr 函数的一个非常好的技巧 (link),您可以在其中将输出的 html 保存到输出文件夹中并使用不同的文件名。

您唯一需要前往标题的是以下内容:

title: "analysis"
author: "Me"
date: "`r format(Sys.time(), '%d %B, %Y, %H:%M')`"
knit: (function(inputFile, encoding) { 
      rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) })
output:
  html_document:
    number_sections: yes
    toc: yes

这“有时”在我的 Mac 上运行得很好,但有时在查找 out_dir 变量时会遇到问题...

我首先想到的是先执行chunk,所以变量设置好了……但这并没有解决问题……

我还重新启动了 R 会话,但这没有帮助。

最后一步是关闭 R,保存工作区,在重新打开 R 并加载工作区后,它再次像魅力一样工作。

我找不到原来的帖子,有人推荐了这个技巧......

重现的准确工作流程

打开新项目,在新文件夹中将其命名为 test
创建一个 r 降价文档
将标题更改为:

---
title: "Untitled"
author: "Me"
date: "`r format(Sys.time(), '%d %B, %Y, %H:%M')`"
knit: (function(inputFile, encoding) { 
      rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) })
output:
  html_document:
    number_sections: yes
    toc: yes
---

```{r write quant output files}
out_dir <- 'test'
if(!file.exists(out_dir)) {
  dir.create(out_dir)
}
```

将文档另存为 test.Rmd
单击 knit 按钮(html 现在已从按钮的选项中删除)
这将失败!

关闭项目!
点击保存环境!

打开项目并单击 knit!
一切正常。

执行 rm(list=ls()) 之后一切正常

【问题讨论】:

  • 想象一下在干净的 R 会话中运行该代码。如果你没有定义它,R 怎么知道out_dir 是什么?当这在重新加载工作区后工作时,这是因为 out_dir 是从您上一个 R 会话结转的对象,它允许代码工作,即使它不应该工作。
  • 你是对的,但是当 html 被创建时,命令会在 rmakrdown 进程中被评估。我也可以手动设置变量 out_dir 仍然存在同样的问题,Rstudio 抱怨 out_dir 不存在...如果脚本运行一次,我也可以执行 rm(list=ls()) ,然后它可以作为嗯...所以我认为这不仅仅是设置变量的问题...
  • 如果不指定该变量,此代码将无法运行。如果没有对您所遵循的工作流程的完整描述,很难说它为什么似乎有效。
  • 我添加了正确的工作流程。这真的很奇怪,因为一切正常,如果我至少重新打开项目......不确定其他人是否可以重现这个......但这对我来说也没有具体意义。我只是想,该命令将在整个降价过程结束时进行评估......
  • 刚刚找到原招的链接

标签: r rstudio knitr r-markdown


【解决方案1】:

您可以尝试在您提供给knit 的函数中设置out_dir 变量以进行渲染:

knit: (function(inputFile, encoding) { 
      out_dir <- 'test';
      rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) })

【讨论】:

  • 我的意思是,我的整个功能/rmarkdown 工作正常,重新打开 r 项目后......即使我删除了已经设置的整个环境......所以我想知道,为什么会这样.或者任何人都不能重现我发布的场景?我在 Mac 和两台 Windows 计算机上进行了尝试,它在所有计算机上都可以重现,并且在重新打开 R 项目后可以工作。
  • 是的,如果我不设置 out_dir 变量,我无法让它在我的机器上工作
  • 如果不按照@NicE 的描述设置 out_dir 变量,我也无法重现它
  • 我还将if(!file.exists(out_dir)) { dir.create(out_dir) }part 直接包含在编织功能中。通过这种方式,它对我有用,也很有意义:您在标题中拥有所有编织的东西,并且可以将正文用于您的内容 - 它应该如何
  • 我也想知道为什么它会起作用,因为page originally describing the trick“knit: 字段(当前未记录的钩子)用自定义函数替换 rmarkdown::render 为渲染。是的,不幸的是它必须是一个巨大的单线,除非你有自己的 R 包。” 无论如何,它对我有用......
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2016-03-04
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2013-10-11
相关资源
最近更新 更多