Запустить другой Rchunk в зависимости от того, какая опция определена в заголовке YAML (params)? - PullRequest
2 голосов
/ 21 марта 2019

Я пытаюсь сделать свой первый Rmarkdown Параметризованный отчет . В первом разделе будет загружен набор данных из одного из двух источников (и внутренняя или внешняя база данных) на основе параметров «dataSource», выбранных пользователем. Требуемый Rscript / код отличается для разных опций.

title: "Optionally DL from external vs internal database"
output: html_document
params:
  dataSource: 
    label: "Select the database for download:"
    value: IntD
    input: radio
    choiceNames: [External DB, Internal DB]
    choiceValues: [ExtD, IntD]
    inline: TRUE

Следующий код работает, но есть ли способ опционально запустить весь Rchunk на основе выбора параметров (например, некоторый код, помещенный непосредственно в заголовок Rchunk)?

```{r downloadData, include=TRUE}

#Can I run different rchunk or code based on the params$dataSource value??
#Can this be done directly in the Rchunk header?

if(params$dataSource=="IntD"){
 source(here::here("R", "Intdownload.R")
}else{
 source(here::here("R", "Extdownload.R")
}
```

Другие варианты, которые я исследовал (и работаю над пониманием того, как реализовать), перечислены ниже. Есть ли какой-либо из этих лучших вариантов, чтобы выяснить, может ли код загрузки использоваться в других документах отчетов / Rscript / Rmarkdown? Я немного озадачен тем, когда это может быть лучше, чем использование 'source'?

  • создание отдельных фрагментов во внешнем скрипте Rscript и использование read_chunk для чтения во внешнем скрипте , а затем вызов каждого блока на основе выбранной опции params.
  • Создание отдельного документа Rmarkdown для загрузки данных, а затем вызов его в этом документе Rmarkdown с использованием child . Позволяет ли эта опция по существу создавать 2 отчета (1 путем вызова дочернего документа Rmarkdown, а другой - для основного документа Rmarkdown) при использовании объектов, созданных в дочернем документе в основном документе?
...