防止rmarkdown params将字符串输入转换为数字

时间:2016-04-12 10:38:15

标签: r bash r-markdown params

这里的第一个问题:),

我一直在尝试使用环境变量作为输入构建parametrized rmarkdown report,如rmarkdown文档中所述。但是,我正在分配的环境变量(作为字符)被评估为数字(而不是字符)。

以下是一个可重现的示例,由2个文件组成:bash脚本test.sh,用于调用报告test-report.Rmd以生成所需的输出。

以下是test.sh

的代码
#!/bin/bash
now=$(date +"%Y-%m-%d")
echo "Analysis for" $now
R -e "rmarkdown::render('test-report.Rmd', params = list(latest_update = as.character($now)))"

正如您在下图中所观察到的那样,我分配给latest_update的环境变量被评估为数字(而不是字符)。我希望看到2016-04-12代替2000作为params$latest_update

的值

html output of test-report.Rmd

这是我test-report.Rmd的代码:

---
title: "Test Report"
author: "test author"
fontsize: 8pt
output:
  html_document
params:
  latest_update:
    value: !r as.character("2016-04-12")
---


```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, results = 'asis')
```

```{r params}
cat("# here are some params!")
cat("\n\n")
cat("param value: ")
cat(params$latest_update)
cat("\n\n")
```

为了进一步隔离问题,我尝试输入一个字符串(而不是环境变量到rmarkdown::render,但我仍然得到上述相同的结果。

R -e "rmarkdown::render('test-report.Rmd', params = list(latest_update = as.character("2016-04-12")))

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

感谢@ 123的评论,解决方案只是转义环境变量

在我的test.sh

中替换此行
R -e "rmarkdown::render('test-report.Rmd', params = list(latest_update = '$now'))"

我获得了2016-04-12的所需输出(因此,未改变的字符串值)。

(谢谢 123 !)