【问题标题】:R Script that works fine, does not run in knitr - issue with %>%运行良好的 R 脚本,不能在 knitr 中运行 - %>% 的问题
【发布时间】:2016-01-15 10:15:22
【问题描述】:

我有一个运行良好的 R 脚本(包括 dplyrmagrittr)。但是,当我在 .Rmd 中获取脚本并编织它时,我得到了错误

Error in missingStat(oil_condensed_usefulCols): could not find function "%>%" Calls: <Anonymous> ... withCallingHandlers -> withVisible -> eval -> eval -> missingStat Execution paused

missingStat 是我的功能之一。这里有什么问题?

【问题讨论】:

  • 您是否也在 .Rmd 文件中导入了 magrittr 库?
  • 不,我在脚本中导入它 - 就像我对所有其他库所做的那样。现在我尝试在运行脚本之前导入它,但错误(不出所料)仍然存在。
  • 你缓存你的块吗?如果是这样,请确保您加载包的地方和您的功能没有被缓存,因为这可能会导致此类问题。
  • @SarinaJ.:到目前为止,我并没有故意缓存。也许没有刻意 - 有没有办法检查?。
  • 解决方案:将library(...)s 放入.Rmd。但是为什么我的包不能在脚本中?脚本范围和library(...)s 是否未转移到 .Rmd 范围? (我很乐意接受 ;-)。)

标签: r dplyr knitr


【解决方案1】:

尝试将调用 library(dplyr) 移动到 R 脚本中的命名代码块中,而不是将其放入 Rmd 文件中。您还需要禁用外部 R 脚本中块的缓存,否则您对脚本所做的更改可能不会出现在编织输出中。

我可以使用 'knitr::read_chunk' 和一个包含命名块但在块外调用 library 的外部文件来重现错误。

这是一个使用dplyr 的最小外部R 脚本,称之为dplyr_cars.R

library(dplyr)
## ---- speed-13
cars %>% 
  filter(speed > 13) %>% 
  summary

注意命名块,使用## ---- &lt;name&gt; 创建,library(dplyr) 在名称上方。

然后,在externalize_dplyr.Rmd 文件中:

---
title: "Externalize Dplyr"
date: "January 20, 2016"
output: html_document
---

```{r cache=FALSE}
knitr::read_chunk('dplyr_cars.R')
```

```{r speed-13}
```

编织这个会产生你报的错误:

Error in eval(expr, envir, enclos) : could not find function "%>%"
Calls: <Anonymous> ... handle -> withCallingHandlers -> withVisible -> eval -> eval

但是如果你将库声明移动到命名的块中,它就可以工作。

## ---- speed-13
library(dplyr)
cars %>% 
  filter(speed > 13) %>% 
  summary

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多