在 rmarkdown::render 之外初始化输出位置

2023-12-07

米科·马蒂拉帮助我找到了一种动态时间戳文件的方法,使用working代码如下:

---
title: "Untitled"
author: "Jane Doe"
date: "`r Sys.Date()`"
output: word_document
knit: >
(function(input_file, encoding) {
# Render, keeping intermediate files for extracting front matter
md_dir <- tempdir()
output_file_temp <- rmarkdown::render(
  input = input_file,
  output_file = tempfile(),
  intermediates_dir = md_dir,
  clean = FALSE
)

# Get the rendered front matter from the intermediate Markdown file
md_file <- fs::path_ext_set(fs::path_file(input_file), ".knit.md")
metadata <- rmarkdown::yaml_front_matter(fs::path(md_dir, md_file))

# Build the output file name based on rendered metadata
output_name <- with(metadata, paste(title, "by", author, "on", date))

# Add the file extension and move to the working directory
output_ext <- fs::path_ext(output_file_temp)
output_file <- fs::path_ext_set(output_name, output_ext)
fs::file_move(output_file_temp, output_file)

message("Output moved to: ", output_file)
})
---

然而,我还想指定从内部的输出位置knitr代码,基于projectmanager and project。如果该文件夹尚不存在,则应创建该文件夹。

这可以按如下方式完成:link。我尝试将这些解决方案结合起来。

我尝试过以几种不同的方式做到这一点,但不知何故我无法让它发挥作用。

所需的输出位置:

.../projectname/project")

我尝试使用setwd以及使用file.path :

---
title: "Untitled"
author: "Jane Doe"
date: "`r Sys.Date()`"
output: word_document
projectmanager: "Earth Worm Jim"
project: "getstuffdone"
knit: >
  (function(input_file, encoding) {
    # Render, keeping intermediate files for extracting front matter
    md_dir <- tempdir()
    output_file_temp <- rmarkdown::render(
      input = input_file,
      output_file = tempfile(),
      intermediates_dir = md_dir,
      clean = FALSE
    )
    
    # Get the rendered front matter from the intermediate Markdown file
    md_file <- fs::path_ext_set(fs::path_file(input_file), ".knit.md")
    metadata <- rmarkdown::yaml_front_matter(fs::path(md_dir, md_file))
    # Tom: Specify the main directory in which to store all folders
    main_directory <- "Z:/Coding/R_scripts/Markdown/RMarkdown_out/"
    # Check current working directory
    print(getwd())
    # print(metadata)

    # Dynamically create a full path for the new file based on projectmanager and project
    out_dir <- with(metadata, paste0(main_directory, projectmanager, "/", project, "/"))
    print(out_dir)

    # Here I tried to set the working directory to the dynamically created wd
    setwd(out_dir)
    print(getwd())

    # Build output file name based on rendered metadata
    output_name <- with(metadata, paste(title, date, initials))
    print(output_name)
    output_dir = file.path(dirname(output_name), out_dir)
    print(output_dir)

    # path_ext() returns the last extension (if any) for a path
    output_ext <- fs::path_ext(output_file_temp) 
    print(output_ext)
    
    # replaces the extension with a new extension path_ext_set(path, ext)
    output_file <- fs::path_ext_set(output_name, output_ext) 
    print(output_file)

    fs::file_move(output_file_temp, output_file)
    message("Output file: ", output_file)
  })
---

您走在正确的轨道上,但如果需要,您还需要添加一个步骤来创建输出目录,并记住在移动渲染文件时使用创建的目录。

我会避免更改脚本中的工作目录。直接使用完整路径往往会使代码更容易理解。

这是添加了缺少的步骤的修改版本:

---
title: "Untitled"
author: "Jane Doe"
date: "`r Sys.Date()`"
output: word_document
projectmanager: "Earth Worm Jim"
project: "getstuffdone"
knit: >
  (function(input_file, encoding) {
    # Render, keeping intermediate files for extracting front matter
    md_dir <- tempdir()
    rendered_file <- rmarkdown::render(
      input = input_file,
      output_file = tempfile(),
      intermediates_dir = md_dir,
      clean = FALSE
    )
    
    # Get the rendered front matter from the intermediate Markdown file
    md_file <- fs::path_ext_set(fs::path_file(input_file), ".knit.md")
    metadata <- rmarkdown::yaml_front_matter(fs::path(md_dir, md_file))
    
    # Directory that the output is relative to. Can be an absolute path.
    OUTPUT_ROOT <- "."
    
    # Build the output file name and directory based on rendered metadata
    output_dir <- with(metadata, fs::path(projectmanager, project))
    output_name <- with(metadata, paste(title, "by", author, "on", date))
    
    # Add the file extension
    output_ext <- fs::path_ext(rendered_file)
    output_file <- fs::path_ext_set(output_name, output_ext)
    
    # Combine parts to final path
    output_path <- fs::path(OUTPUT_ROOT, output_dir, output_file)
    
    # Create output directory if it doesn't exist
    output_path_dir <- fs::path_dir(output_path)
    if (!fs::dir_exists(output_path_dir)) {
      fs::dir_create(output_path_dir)
    }
    
    # Move render result to output location
    fs::file_move(rendered_file, output_path)
    message("Output moved to: ", output_path)
  })
---
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 rmarkdown::render 之外初始化输出位置 的相关文章

  • Rmarkdown 图像跳过文本

    我正在将 Rmarkdown PDF 文档与以下 YAML 设置放在一起 output pdf document fig caption true fig crop true toc depth 3 header includes usep
  • 如何删除 Rmd 输出到 PDF 中代码块之间的空白?

    如何删除图表末尾与下一个图表之间的多余空白 我有一个闪亮的应用程序 运行参数化的 Rmd 输出为 html 和 PDF html 很好 但 PDF 中有太多空白 我应该将所有内容都放入两页中 因此边距 几何形状很软 但是我需要在第 1 页底
  • 如何在 RMarkdown 中渲染 wordcloud2 的输出

    我怎样才能确保输出wordcloud2 wordcloud2 出现在我的 RMarkdown HTML 文档中 它在 RStudio 中渲染得很好 包括在 RMarkdown 文档的预览中 但是当我使用 blogdown 将其上传到我的 n
  • 渲染 Markdown 文件时,标题不显示在 R Markdown 上

    我正在尝试将 Rmd 文件转换为 md 输出 md document 但标题未显示在渲染的文件上 当我尝试将同一文件渲染为 html 文件 输出 html document 时 标题确实会显示 标题显示在渲染的文档上 title Test
  • R Markdown:openBinaryFile:不存在(没有这样的文件或目录)

    我开发了一个闪亮的应用程序 允许用户通过 R Markdown 下载 HTML 报告 我正在尝试将自定义 css 和图像包含到我的 rmarkdown 文件中 但是 我不断收到此错误消息 pandoc Could not fetch eit
  • 删除 rmarkdown 文档中的部分

    我希望将章节标题放在页眉而不是页面正文中 fancyhead C 将节标题放在标题中 但如何抑制节的正文打印 title Untitled classoption landscape output pdf document number s
  • 在 R Markdown 文件中嵌入 pdf 并调整分页

    我即将完成博士学位 我需要在 R Markdown 文本中间的某个位置嵌入一些论文 pdf 格式 将 R Markdown 转换为 PDF 时 我希望将这些 PDF 论文嵌入到转换中 但是 我希望这些 PDF 论文也根据 Markdown
  • 在 R 中将多个回归表输出到 Word 文档的多个页面中

    我的目标是创建一个多页 Microsoft Word 文档 在连续页面上包含许多格式化回归表输出 理想情况下 这可以使用 R Markdown 来完成 我很幸运地使用Word在Word中制作了格式良好的回归表sjPlot tab model
  • R Notebook 预览中的奇怪字符

    当我预览 R Notebook 时 HTML 输出包含奇怪的字符 该块代码和输出 在 HTML 中呈现为 我应该如何解决这个问题 会话信息 R版本3 6 0 2019 04 26 平台 x86 64 w64 mingw32 x64 64位
  • R 笔记本:opts_chunk 没有效果

    我正在开发我的第一台 R 笔记本 除了一个问题之外 它运行得很好 我想成为我内联输出的数字 r realbignumber 以逗号作为分隔符且最多 2 位小数 123 456 789 12 为了实现这一目标 我在文档的开头添加了一个块 其中
  • rmarkdown:pandoc:找不到 pdflatex

    当我在 Mac 上使用 render rmarkdown 从 Rmd 文件生成 pdf 文件时 出现错误消息 pandoc pdflatex not found pdflatex is needed for pdf output Error
  • 更改 RMarkdown 中的块背景颜色

    我希望某个代码块以不同的颜色 例如红色 突出显示 以表明这是不好的做法 如果我使用的是 Rnw 我可以添加块选项background red 并得到我想要的 但这似乎不起作用 Rmd 我的猜测是 我需要制作一个自定义 css 样式表 尽管我
  • 自动化 RStudio 处理 RMarkdown?

    我有一个 RMarkdown 文件 用于生成漂亮的 HTML 报告 问题是 我希望能够自动化它 以便它可以在无头服务器上运行 因此 不会有人启动 Rstudio 并按下 knithtml 按钮 而且 Rstudio 似乎正在做很多额外的魔法
  • 如何总结此R问题中的销售数量、售出酒类数量和花费金额

    我使用以下代码在 R 上上传我的数据 if file exists ames liquor rds url lt https github com ds202 at ISU materials blob master 03 tidyvers
  • 如何使用RStudio用Stata命令编写RMarkdown文件?

    我的问题已在标题中解释 我尝试编译一个示例 Rmd 我在这里找到 http www ssc wisc edu hemken Stataworkshops Stata 20and 20R 20Markdown http www ssc wis
  • 使用行内 r 代码作为 R markdown 标头的一部分

    我希望使用行 R 代码作为 r markdown 文件中标头的一部分 然而 当我编织文件时 标题上使用的字体是不同的 如何确保字体相同 下面是一个简单的例子 r 1 1 Header 您可以将内容括在反引号中以表示内联 r 代码 如下所示
  • 使用 R Markdown 文档作为函数源

    我正在研究 R Markdown 来记录我经常使用的功能 我会将它们放入 R Markdown 文件中以记录它们 然后如果我几个月后回来查看它 就能够阅读我在函数背后的想法 我的问题是 如果我开始一个新的 R 项目 是否可以获取 r mar
  • 如何将 Shiny 中生成的反应图传递到 Rmarkdown 以生成动态报告

    简而言之 我希望能够通过单击按钮从我的闪亮应用程序生成动态 Rmarkdown 报告文件 pdf 或 html 为此 我想我将使用 Shiny 的参数化报告 但不知何故 我无法将单个谜题转移到所需的目标 使用此代码 我们可以在 R Shin
  • 在顶级标题之前将图像添加到 Rmarkdown Bookdown 输出

    下面的例子 即保存为文件index rmd 具有相同的代码块来显示顶级标题上方和下方的图像 但图像不会出现在顶级标题上方 如果有文件 就会发生这种情况 输出 yml仅此条目bookdown gitbook 在同一目录中 该行似乎强制执行一个
  • kableExtra:垂直对齐在多列 PDF 输出中不起作用

    我想将 kableExtra 表中的所有列对齐到顶部 这valign top 选项似乎并不能解决这里的问题 此外 由于某种原因 第三列不知何故被放在第二列之上 并且引用也不起作用 下面的MWE是基于这个相关的SO问题 它只需要2列 kabl

随机推荐

  • 从 C++ 扩展中获取 MIME 类型

    有什么方法可以在给定文件扩展名的情况下获取 C 中的 MIME 类型吗 我读过有关 HKEY CLASSES ROOT 的内容 但老实说我不知道 如何使用它 我想要的是作为输入 string extension pdf string ext
  • SWT 是否分发可在任何受支持的操作系统上运行的 JAR?

    The SWT项目目前为每个受支持的操作系统维护一个可分发的版本 例如 swt 3 4 2 win32 win32 x86 zip swt 3 4 2 gtk linux x86 zip swt 3 4 2 carbon macosx zi
  • EF 6 - 如何正确执行并行查询

    创建报告时 我必须执行 3 个涉及相同上下文的独立实体的查询 因为它们很重 所以我决定使用 ToListAsync 为了让它们并行运行 但是 令我惊讶的是 我得到了一个例外 使用 EF 6 并行执行查询的正确方法是什么 我应该手动启动新任务
  • 为什么使用 LWUIT 的三星手机不支持阿拉伯字体?

    我已经在一些三星手机上测试了我的移动应用程序以进行测试 三星 Corby b3410 和三星 c6712 这些手机上未显示阿拉伯字体 但它可以在诺基亚手机上正常工作 我在用着System font用于显示阿拉伯字体 为什么这些手机不支持 如
  • Latin-1 / UTF-8 编码 php

    我有一个 UTF 8 编码与 Latin 1 混合的数据库 我认为这就是问题所在 这就是字符在数据库中的样子 should be 当我将标题设置为 然后字符就出来了 当我删除标题时 它们会像数据库中一样出现 我希望他们像这样出来 如果可能的
  • Core Haskell 将类型应用于函数意味着什么?

    我为 Core Haskell 编写了一个自定义的漂亮打印机 以便更好地研究 Core 的结构 这台漂亮打印机的要点是 它需要核心模块并在输出中包含数据构造函数 默认情况下Outputable执行好像不行 这是我运行漂亮打印机的模块的代码
  • 如何将多域用户电子邮件添加到 Azure AD

    我们有三个不同的网站 我们希望使用 Azure AD 来实现单点登录 我的问题是如何将可能拥有不同电子邮件地址的用户添加到 Azure AD 通过 API 例如 电子邮件受保护 电子邮件受保护 电子邮件受保护 etc 当我尝试通过 API
  • 如何在 Eclipse 编辑器中打开外部浏览器

    如何以编程方式使用 Eclipse 插件中的打开选项打开 Safari 等外部浏览器 try PlatformUI getWorkbench getBrowserSupport getExternalBrowser openURL new
  • 使用 PHP 创建 Web 服务

    我想用 PHP 创建一个可供不同消费者 网页 Android 设备 iOS 设备 使用的 Web 服务 我来自 Microsoft 背景 因此对如何使用 C 等进行操作很满意 理想情况下 我希望能够提供可以发送 JSON 的 REST 服务
  • 如何使用 React 导航在 mobx 商店中导航?

    我可以用this props navigation从屏幕组件进行导航 我应该如何在 mobx 存储文件中执行类似操作 或者我应该在商店中进行导航吗 我读了无需导航道具即可导航文章 但它似乎只适用于屏幕组件 对吗 有人说用global变量来存
  • 具有选择类的语义 UI 多级下拉列表不会展开

    当我尝试使用下拉菜单时search selection并选择一个子类别 它会展开到自身中 并且下拉列表中会出现一个小滚动条 如果我不添加search selection它似乎运行得很好 JSFiddle https jsfiddle net
  • JavaScript 图像 URL 验证

    我需要验证图像 url 以检查该 url 是否是以下任何扩展名的图像 jpeg jpg gif png 示例 当我们验证此 url 时http www example com asdf jpg它应该给我们真正的价值和像这样的网址http w
  • 有没有办法在热图中保留聚类但减少观察数量?

    我的数据集包含 20 列 90 个观察值 行 我生成了一个非常简洁的热图 它使用 pheatmap 包将我的数据分为两组 虽然它并不完全干净 但树状图的两个簇几乎根据我的条件将我的样本分为两个不同的组 现在我想将这组 90 个观察值减少到大
  • 单引号和双引号 html 属性之间的功能差异是什么?

    Let sEncodedHref代表一个HttpUtility HtmlAttributeEncode 是字符串 生成的 html 之间是否存在功能差异 如下所示 String Format span class blue src 0 sE
  • 从 netcdf 中提取特定经纬度的值

    我正在尝试读入 R 的 netCDF 文件 网络CDFchirps v2 0 1981 days p05 nc是从这里下载的 ftp ftp chg ucsb edu pub org chg products CHIRPS 2 0 glob
  • 反转字符串顺序

    我想反转字符串的顺序 例如 乔 红 红乔 我相信相反的方法对我没有帮助 因为我不想反转每个字符 只是切换单词 首先 您需要定义 单词 的含义 我假设您只需要用空格分隔的字符串 在这种情况下 我们可以这样做 join reversed s s
  • 如何在pygame中使用其他字体?

    我已经下载了一种名为 redline ttf 的字体 我想在 pygame 中使用它 我只想在屏幕上打印文本 我在文件夹 pygame gt lib 中找到了一种名为 freesansbold ttf 的基本字体 我已将下载的字体放在同一个
  • 使用 jQuery 使用值和类根据复选框过滤结果

    首先 这是我现在所拥有的一些东西 链接到 JSFiddle 代码如下 div div div div
  • 订阅确认时出现 Amazon SNS SDK 无效参数异常

    我正在尝试使用以下代码订阅 Android 用户接收推送通知 public static void subscribeToTopic final String topicArn String EndpointArn SubscribeReq
  • 在 rmarkdown::render 之外初始化输出位置

    米科 马蒂拉帮助我找到了一种动态时间戳文件的方法 使用working代码如下 title Untitled author Jane Doe date r Sys Date output word document knit gt funct