首页 > 解决方案 > 从 shell 执行多行 R 表达式(带缩进)

问题描述

我正在努力实现您可能天真地写成的东西:

R -e "
rmarkdown::render(
  'MyDocument.Rmd', 
  params = list(
    year = 2017
  ),
  output_file = 'ExampleRnotebook.html'
)
"

这样我就可以制作格式良好的提交脚本以在集群上运行。

我在下面尝试了一些变体,我想知道是否有另一种方法可以用R -f标志来做到这一点?

read -r -d '' EXP << EOF
rmarkdown::render(
  'MyDocument.Rmd',
  params = list(
    year = 2017
  ),
  output_file = 'ExampleRnotebook.html'
)
EOF
R -e "$EXP"

但我得到了一系列看起来像这样的错误:

ARGUMENT 'params~+~=~+~list(' __ignored__

对于表达式的不同行,后跟:

> rmarkdown::render(
+ 
+ Error: unexpected end of input

重现:

我的文档.Rmd =

---
title: "R Notebook"
output: html_notebook
params: 
  year: 0000
---

```{r}
params$year

```

这工作正常:

read -r -d '' EXP <<- EOF 
rmarkdown::render('MyDocument.Rmd', params = list(year = 2017 ), output_file = 'ExampleRnotebook.html')
EOF
R -e "$EXP"

但是使用更长的参数列表很难阅读

标签: rbashshellr-markdown

解决方案


这对我有用(R 版本 3.5.0):

R --no-save <<code
for(i in 1:3) {
  i + 
    2
}
print(i)

runif(5,
      1,10)
code

注意:换行符和填充是有意的。


推荐阅读