【问题标题】:How to avoid a rmd file to execute the entire R script every time I knit it to pdf?每次我将它编织成pdf时,如何避免rmd文件执行整个R脚本?
【发布时间】:2020-06-08 23:26:50
【问题描述】:

问题来了:

file.r 中,我基于一个庞大的数据集进行了广泛的分析。 每次我打开文件时,我只需要加载库,一切都准备好了。 我不再需要下载任何我需要的数据集输入。

现在我创建了一个 RMD file.rmdfile.r 相同的代码来展示它的发现。 我正在尝试预览 pdf 的外观。 问题是当我点击“Knit to pdf”时,它会再次开始下载所有的包和数据集。我必须等待几个小时才能看到代码中微小更改的效果。

还有更多: 在 R 文件中创建的一些对象在 rmd 文件中根本不起作用。

例如:在 R 文件中我编码: edx2 <- edx2 %>% mutate(timeRr = yearRating - release)

当我尝试在 rmd 文件中运行相同的代码时,我收到以下消息: Func(x[[i]],...) 中的错误:找不到对象 'timeRr' 调用:f -> scales_add_defaults -> lapply -> fun 两个文件(r 和 rmd)中加载了相同的库

我做错了什么?

【问题讨论】:

  • 您可以将eval=FALSE 添加到不需要运行的Rmd 块中,或者将cache=TRUE 添加到仅在发生更改时才需要运行的块中。您的第二个问题:很可能timeRr 存在于您的 R 环境中,但由于某种原因不在 Rmd 环境中例如生成它所需的代码不存在。
  • 谢谢,尼尔。但它没有奏效。我将{r, cache=TRUE} 放在每个重要的 R 块中,但是当我将 rmd 文件编织成 pdf 时,它会从头开始执行所有操作(下载等)。关于第二个问题: rmd 包含创建 timeRr 变量的代码,如下:edx2 <- edx2 %>% mutate(timeRr = yearRating - release)
  • 只是为了澄清一下,您是在 Rstudio 中运行它还是通过命令行运行它,例如rmarkdown::render("file.Rmd")
  • Jared:我在 RStudio 中运行一切。 R 文件的选项卡和 rmd 文件的另一个选项卡。

标签: r r-markdown markdown knitr


【解决方案1】:

1) 在数据分析(file.R)结束时,将 Notebook 所需的数据保存在 .RDS 文件中。

例如,如果您生成了 3 个结果:res1、res2 和 res3

results <- list(res1 = res1, res2 = res2, res3 = res3)
saveRDS(file = 'results.RDS', results)

2) 无需获取分析脚本,只需读取 Notebook (.Rmd) 中的结果

data <- readRDS('results.RDS')
# Results available for further use in the Notebook
data$res1
data$res2
data$res3

您使用 edx2 得到的错误可能是由于在生成笔记本期间打开了一个新会话:您确定 file.R 真的生成 edx2,还是仅在您当前的会话中可用?

【讨论】:

  • 谢谢,瓦尔迪。但它没有用。它不断返回未找到 timeRr 的错误,但我不明白:RMD 文件具有运行所有代码的所有指令(我完全从 R 文件复制)。 rmd 上的第一个块 安装并加载库。 第二个下载数据集。 第三块将下载的数据转换成edx2。因此,RMD 文件应该具有从头开始创建 timeRr 变量所需的所有块。为了让运行 RMDfile 的每个人都能获得与我相同的结果,它必须如此。
  • @ValdirSantos,您可以按照我的建议尝试吗:1) 独立于 .Rmd 运行 R 脚本,最后检查您的环境中是否存在 edx2 并将其保存在 .RDS 中。在 .Rmd 中,只需加载 .RDS,它应该可以工作。
猜你喜欢
  • 2015-12-30
  • 2017-07-07
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多