gpt4 book ai didi

r - 使用自定义编织函数并评估列表中引用的函数时,Knitr 未从前一个 block 中找到函数

转载 作者:行者123 更新时间:2023-12-04 15:30:23 25 4
gpt4 key购买 nike

我遇到过奇怪的情况,当一个 block 无法找到在前一个 block 中定义的函数时,编写 R markdown 文档会失败。

我在下面隔离了其中一个(我能做到的最多),这就是它失败的原因:

  • 手动运行每个 block 时运行没有问题
  • 仅当我在 YAML header 中使用自定义编织函数时编织才会失败
  • knitr 仅在我 eval 引用表达式并在列表/映射函数(lapplypurrr:: )
    • 即如果我执行 eval(an_eval[[1]])
    • 没有问题

可重现的 Rmd 文件内容

---
output:
html_document

knit: (function(input, encoding) {
rmarkdown::render(
input = input,
encoding = encoding,
output_file = 'a_file.html'
)
})
---

```{r}
library(knitr)
```

```{r define_function}
a_function <- function() return("a function")
```

```{r runs_fine}
a_function()
```

```{r this_fails}
an_exprs <- list(quote(a_function()))
lapply(an_exprs, eval)
```

错误:

Quitting from lines 26-28 (Debug.Rmd) 
Error in a_function() : could not find function "a_function"
Calls: <Anonymous> ... withVisible -> eval -> eval -> lapply -> FUN -> FUN
Execution halted

session :

> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Catalina 10.15.4

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] knitr_1.28

最佳答案

此时需要指定rmarkdown::render()envir参数,否则默认环境为parent.frame(),这是您在 YAML 中提供给 knit 的(匿名)函数的内部环境。

---
output:
html_document

knit: (function(input, encoding) {
rmarkdown::render(
input = input,
encoding = encoding,
envir = globalenv()
)
})
---

```{r}
library(knitr)
```

```{r define_function}
a_function <- function() return("a function")
```

```{r runs_fine}
a_function()
```

```{r this_fails}
an_exprs <- list(quote(a_function()))
lapply(an_exprs, eval)
```

关于r - 使用自定义编织函数并评估列表中引用的函数时,Knitr 未从前一个 block 中找到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61376839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com