【问题标题】:Have different .RMD file and output file names具有不同的 .RMD 文件和输出文件名
【发布时间】:2019-12-03 17:27:55
【问题描述】:

我在从“带参数的针织”RMD 文件中命名输出 PDF 文件时遇到问题。我的 YAML 标头看起来像这样:

---
title: "Discounting"
output: pdf_document 
#with more parameters for later
---

我的文件名为“Discounting Script.rmd”

现在,当我运行我的 rmd 文件时,输出 PDF 名为“Discounting Script.pdf”不能。如果我能够在下面的代码中的某处执行此操作以获得相似的名称,我可以为 rmd 文件“另存为”。我不能使用 rmarkedown::render 因为我必须用参数编织(我已经尝试了渲染,但我只得到错误)

我想在输出下添加一个部分,所以它看起来像这样:

---
title: "Discounting"
output: pdf_document
     output_file: "Discounting " & Sys.Date() & ".pdf"
---

我也试过了”

 ---
    title: "Discounting"
    output: pdf_document
         output_file: paste0("Discounting ",Sys.Date(),".pdf")
    ---

但是两者都不起作用,并且它们都抛出错误。这应该是一个简单的操作来完成,但我在网上找不到任何对我有帮助的东西。

这是“整个文件”,YAML 标头下的所有内容都可以正常工作,只是我遇到问题的标头。

---
title: " Discounting"
output: pdf_document 
  output_file: `r paste0("Discounting ", Sys.Date(), ".pdf")`
params:
  CPI: 
    label: "CPI:"
    value: .02
  Federal_Bonds: 
    input: slider
    label: "Federal Bonds are on rows:"
    min: 6
    max: 12
    value: [7,8]
    step: 1
    round: 1
    dragRange: true
  Provincial_Bonds:  
    label: "Provincial Bonds are on rows:"
    min: 10
    max: 35
    step: 1
    round: 1
    value: [15, 28]
  Corporate_Bonds:  
    label: "Corporate Bonds are on rows:"
    value: [35,86]
    min: 30
    max: 100
    round: 1
    step: 1
---

```{r eval = TRUE, echo= FALSE, warning = FALSE, results = "asis", message = FALSE}
Federal_Start <- params$Federal_Bonds[1]
Federal_End <-params$Federal_Bonds[2]
Provincial_Start <- params$Provincial_Bonds[1]
Provincial_End <- params$Provincial_Bonds[2]
Corporate_Start <- params$Corporate_Bonds[1]
Corporate_End  <- params$Corporate_Bonds[2]
CPI <- params$CPI
```


```{r eval = TRUE, echo= FALSE, warning = FALSE, results = "asis", message = FALSE}
#loading packages
library(plyr)
library(dplyr)
library(kableExtra)
library(scales)
library(ggplot2)
library(RODBC)
library(data.table)
library(DT)
library(treemapify)
library(devtools)
library(digest)
library(plotly)
library(shiny)
library(ggrepel)
library(readxl)
library(tvm)
library(jrvFinance)
library(lubridate)
```

```{r eval = TRUE, echo= FALSE, warning = FALSE, results = "asis", message = FALSE}
printSectionTitle <- function (title) {
 cat("","\n\n")
 template <- title
 cat(sprintf(template),"  \n")
}
```

```{r eval = TRUE, echo= FALSE, warning = FALSE, results = "asis", message = FALSE} 
port_table <- c(Federal_Start, Federal_End, Provincial_Start, Provincial_End, Corporate_Start, Corporate_End, CPI)
```


```{r eval = TRUE, echo= FALSE, warning = FALSE, results = "asis", message = FALSE}
#Formatting the tables and creating a pretty report
printSectionTitle(sprintf("# %s","The Company"))
printSectionTitle(sprintf("# %s","Merging of Bond Portfolio with Other Risk Free Assets"))
printSectionTitle(sprintf("## %s",paste0("as at ", format(as.Date(Start_Date), "%d %B %Y"))))


colnames(port_table) <- c("","")
port_kable <- kable(port_table, align = "r",col.names = NA)
port_kable <- row_spec(port_kable, row = c(4, 7), bold = TRUE, underline = TRUE)
print(kable_styling(port_kable, bootstrap_options = "striped",latex_options = "hold_position", position ="left"))
```

上面的代码得到这个错误 yaml::yaml.load(..., eval.expr = TRUE) 中的错误: 扫描仪错误:在此上下文中,第 3 行第 14 列不允许映射值 调用:... parse_yaml_front_matter -> yaml_load -> 执行停止

【问题讨论】:

  • Yaml 标头不采用 Excel 代码(第一个示例)或原始 R 代码(第二个示例),但您可以使用 `r paste0(...)`(如 stackoverflow.com/q/23449319)。
  • 虽然我认为这是该链接的副本,但您的评论 "can't use rmarkdown::render" 也是一个问题:您如何尝试使用参数,发生了什么?请具体说明,包括提供一个最小的工作示例或至少提供您得到的逐字记录错误(带有证实代码)。
  • title: "IBNR Discounting" output: pdf_document output_file: r paste0("IBNR Discounting ", Sys.Date, ".pdf") 得到以下错误 yaml::yaml.load(..., eval.expr = TRUE) 中的错误:扫描仪错误:映射在第 3 行第 14 列的上下文中不允许使用值调用: ... parse_yaml_front_matter -> yaml_load -> 执行暂停
  • 评论在维护重要代码或数据的布局方面非常糟糕。如果它与问题相关,请将其添加到问题中。谢谢! (但如果那是你的文字代码,你的意思是使用Sys.Date(),包括括号?)
  • 已更新,包含代码。

标签: r r-markdown


【解决方案1】:

一种选择是使用 rmarkdown::render 从单独的 .R 脚本呈现您的 R Markdown 输出(此处称为 discounting.Rmd)。您可以在 params 参数中分配参数:

rmarkdown::render(
  "test_knit.Rmd",
  params = list(cpi = 10),
  output_file = paste0("Discounting_", Sys.Date(), ".pdf")
)

你的 Rmd 文件看起来像这样:

---
params:
  cpi:
output: pdf_document
title: "Discounting"
---

### Content

```{r}
params$cpi * 5
```

这将生成一个以今天日期命名的 PDF 输出。

【讨论】:

  • 在 YAML 标头中设置相同的参数?
  • 我需要先用参数编织,这样我才能在显示的用户表单中添加自己的参数
  • 是的,您可以将参数放在渲染调用中 - 我添加了一个示例。这比使用 R Studio knit 功能更具重现性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 2014-02-17
  • 2021-07-23
相关资源
最近更新 更多