You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从R包向Quarto文档传递数据?解决模板找不到报错

解决R包调用Quarto模板及传递数据的完整步骤

1. 修正模板调用的语法错误

你的usethis::use_template调用存在两个语法问题,这是触发"object 'QuartoDemo.qmd' not found"错误的直接原因:

  • template参数需传入字符串格式的文件名,你直接写QuartoDemo.qmd会被R识别为变量而非文件名,必须加引号包裹
  • save_as参数同理,example需要改为字符串形式(比如"example.qmd")

修正后的调用代码:

usethis::use_template(
  template = "QuartoDemo.qmd",
  save_as = "example.qmd",
  data = list(Package = "Demo"),
  package = "Demo"
)

2. 调整模板文件的目录结构

R包的模板文件必须放置在**inst/templates**目录下,而非根目录的templates文件夹——usethis的use_template默认会查找包内inst/templates路径下的文件。你需要:

  • 将原templates/QuartoDemo.qmd移动到inst/templates/QuartoDemo.qmd
  • 运行devtools::document()或devtools::build()重新构建包

3. 正确传递函数数据到Quarto模板

要实现将函数hello()中的数据传递到Quarto模板,需调整函数逻辑与模板内容:

3.1 修正R函数的返回与导出逻辑

原hello()仅打印字符串且无返回值,同时@export text123属于错误写法(应导出函数而非变量),修改后:

#' DemoQuarto
#'
#' @return 返回要传递给Quarto模板的文本内容
#' @export
hello <- function() {
  text123 <- "Hello, world!"
  return(text123)
}

3.2 修改Quarto模板以接收数据

Quarto模板可通过{{ }}语法读取use_template传递的data参数,也可直接调用包内函数获取数据,修改QuartoDemo.qmd:

---
title: "Demo Quarto Document"
---

```{r}
# 方式1:调用包内函数获取数据
text123 <- Demo::hello()
print(text123)

# 方式2:直接使用use_template传递的参数
print("当前包名: {{ Package }}")
### 3.3 整合模板生成的调用逻辑
可编写专门函数触发模板生成并传递自定义数据:
```R
#' 生成带数据的Quarto演示文档
#' @export
generate_quarto_demo <- function() {
  # 获取函数返回的待传递数据
  demo_text <- hello()
  # 调用模板并传递数据
  usethis::use_template(
    template = "QuartoDemo.qmd",
    save_as = "demo_output.qmd",
    data = list(
      Package = "Demo",
      TextContent = demo_text
    ),
    package = "Demo",
    open = FALSE # 可选,是否自动打开生成的文档
  )
}

此时Quarto模板还能直接使用{{ TextContent }}调用传递的文本:

直接输出传递的内容: {{ TextContent }}

4. 验证包的有效性

完成上述调整后,执行以下步骤确认:

  • 运行devtools::document()更新文档与导出信息
  • 运行devtools::check()检查包是否存在错误
  • 安装包后调用Demo::generate_quarto_demo(),查看生成的Quarto文档是否能正确输出Hello, world!

内容的提问来源于stack exchange,提问作者Russ Conte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:06:17