从外壳执行多行R表达式(带有缩进)

时间:2019-01-24 14:29:42

标签: r bash shell r-markdown

我正在尝试实现您可能天真的写为:

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

要复制:

MyDocument.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"

但是使用较长的参数列表会变得难以阅读

1 个答案:

答案 0 :(得分:2)

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

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

runif(5,
      1,10)
code

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