代码之家  ›  专栏  ›  技术社区  ›  Richard J. Acton

从shell执行多行r表达式(带缩进)

  •  2
  • Richard J. Acton  · 技术社区  · 7 年前

    我正在努力实现你可能天真地写的:

    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"
    

    但参数列表越长,就越难阅读

    1 回复  |  直到 7 年前
        1
  •  2
  •   zx8754    7 年前

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

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

    注: 断线和填塞是有意的。

    推荐文章