可以 rmarkdown return 一个值到一个目标

Can rmarkdown return a value to a target

我发现自己经常使用 rmarkdown/rnotebooks 进行探索性分析,因为我可以结合代码、散文和图表。很多时候,我会在 markdown 中编写我的整个预测建模方法和模型本身。

然而,我最终在 rmarkdown 中嵌入了预测模型,未链接到我的 drake_plan 中的目标。今天,我先将这些保存到磁盘,然后使用 file_in 或其他类似方法将它们读回我的 plan

我的问题是 - 我可以有一个降价文档 return 一个直接指向 drake 目标的对象吗?

概念上:

plan = drake_plan(
    dat = read_data(),
    model = analyze_data(dat)
)

analyse_data = function(dat){
    result = render(....)
    return(result)
}

这样 - 我可以将我的模型直接放入我的 drake 目标中,但如果我需要研究模型,我可以打开我的 markdown/HTML.

我建议您将这些模型作为目标包括在计划中,但您描述的是可能的。 R Markdown 和 knitr 在调用环境中自动 运行 代码块,因此您在报告中进行的变量分配可用。

library(drake)
library(tibble)

simulate <- function(n){
  tibble(x = rnorm(n), y = rnorm(n))
}

render_and_return <- function(input, output) {
  rmarkdown::render(input, output_file = output, quiet = TRUE)
  return_value # Assigned in the report.
}

lines <- c(
  "---",
  "output: html_document",
  "---",
  "",
  "```{r show_data}",
  "return_value <- head(readd(large))", # return_value gets assigned here.
  "```"
)

writeLines(lines, "report.Rmd")

plan <- drake_plan(
  large = simulate(1000),
  subset = render_and_return(knitr_in("report.Rmd"), file_out("report.html")),
)

make(plan)
#> target large
#> target subset

readd(subset)
#> # A tibble: 6 x 2
#>        x       y
#>    <dbl>   <dbl>
#> 1  1.30  -0.912 
#> 2 -0.327  0.0622
#> 3  1.29   1.18  
#> 4 -1.52   1.06  
#> 5 -1.18   0.0295
#> 6 -0.985 -0.0475

reprex package (v0.3.0)

于 2019-10-10 创建