当我创建一个简单的 R 包时,我想在我的
test_doc.qmd
文件中使用在 .R 文件中创建的函数。问题是,在渲染 qmd 文件时,在包中创建该函数时找不到该函数。当我使用 devtools::load_all()
时它可以工作,所以我可以在代码块中找到该函数,而无需在控制台中手动运行它。我尝试在此 GitHub 存储库上创建一个可重现的示例:https://github.com/QuintenSand/test_package
因此,您应该首先克隆存储库,然后尝试运行 qmd 文件:
---
title: "Test quarto doc"
format: html
editor: visual
---
## Quarto
Test if the function will be rendered:
```{r}
test_function(TRUE)
```
函数 test_function 位于 test_function.R 文件中。渲染文档时返回以下错误:
processing file: test_doc.qmd
|................................... | 67% [unnamed-chunk-1]
Quitting from lines 12-13 [unnamed-chunk-1] (test_doc.qmd)
Error in `test_function()`:
! could not find function "test_function"
Execution halted
但是当我跑步时
devtools::load_all()
:
devtools::load_all()
ℹ Loading test
代码块:
即使该函数不在全局环境中,您也可以看到它仍然有效。所以我想知道当文档中有 .R 自定义函数时我们如何渲染四开文档?
如果您确实需要包裹,那么您应该
library()
加载包。假设该包将被称为
test
(基于您的 DESCRIPTION
文件):
---
title: "Untitled"
format: html
editor: visual
---
```{r}
library(test)
```
Test if the function will be rendered:
```{r}
test_function(TRUE)
```
或者,如果您只想使用特定文件中的函数,那么您可以将该文件的内容获取到您的 Quarto 源中。
---
title: "Untitled"
format: html
editor: visual
---
```{r}
source("test_function.R")
```
Test if the function will be rendered:
```{r}
test_function(TRUE)
```
如果
.R
文件位于子目录中(例如在示例存储库中),那么您需要将其包含在 source("R/test_function.R")
等路径中。