Запустите RMarkdown с аргументами в командной строке

Я пытаюсь запустить файл Rmarkdown (myfile.Rmd) из терминала командной строки. Этот файл должен принимать аргумент для работы. Мы можем использовать этот простой файл в качестве примера:

---
title: "Simple example"
output:
  pdf_document: default
---

```{r read_arg, include=FALSE}
args = commandArgs(TRUE)
VAR = args[1]
```

```{r show_var}
VAR
```

Итак, прежде всего, возможно ли запустить файл Rmarkdown, прочитав аргументы, как это сделано для Rscripts? Я имею в виду, не читая входные файлы, как описано в этом вопросе.

Если так, как это можно сделать? Я надеюсь, что часть работы здесь, используемая для запуска файла Rmarkdown, сработала для меня, но это не из-за аргумента. Я пытаюсь запустить что-то вроде:

Rscript -e "rmarkdown::render('myfile.Rmd myarg')"

РЕДАКТИРОВАТЬ: Но это дает следующую ошибку:

Ошибка в tools::file_path_as_absolute(входная): файл 'myfile.Rmd_myarg' не существует Вызовы: -> setwd -> dirname -> Además: Предупреждающие сообщения: 1: в normalizePath(path, winslash = winslash, mustWork = mustWork): path[1]="myfile.Rmd myarg": не существует. fichero или el Directorio 2: в normalizePath(path, winslash = winslash, mustWork = mustWork): path[1]="myfile.Rmd_myarg": не существует. o el Directorio Ejecución interrumpida

Есть идеи? Спасибо!

2 ответа

Решение

Добавление myarg Объект в качестве параметра это путь:

Rscript -e "rmarkdown::render('example.Rmd',params=list(args = myarg))

А затем добавьте параметр к вашему Rmd файл:

---
title: "Simple example"
output:
  pdf_document: default
params:
  arg: myarg
---

Документация по параметризованным отчетам здесь: https://rmarkdown.rstudio.com/developer_parameterized_reports.html

Просто поясню для тех, кто запутался, как я:

Принятый ответ подразумевает, что значение параметра в заголовке YAML и значение параметра в командной строке должны совпадать. Они не обязательно должны совпадать. Что бы это ни было, вам не нужно добавлять его в заголовок YAML.

Это противоречит цели создания отчета из командной строки. Каждый раз, когда вы захотите изменить значение , вам также потребуется открыть .Rmd и изменить его в заголовке YAML.

Достаточно просто инициализировать параметр в заголовке, например, с помощью пустой строки или NA. Например:

      ---
title: "Simple example"
output:
    pdf_document: default
params:
    args: ''
---

```{r read_arg, include=FALSE}
args <-  params$args
VAR <- args[1]
```

```{r show_var}
VAR
```

Аргументы перешли кЗатем команда может присвоить параметру желаемое значение путем перезаписи. Например:

      Rscript -e "rmarkdown::render('example.Rmd’, param=list(args=myarg))"

Я бы еще отметил, чтоявляется аргументом, тогда какявляется параметром.

Другие вопросы по тегам