子级无法在 Posit Connect 中使用 knit::knit_child 访问父级的对象

问题描述 投票:0回答:1

我正在收集数据并在文档中创建一些图形,我们称之为

main.qmd
。然后,在另一个文档(例如
knitr::knit_child
)上使用
sub.qmd
循环,使用
main.qmd
中定义的数据,创建其他数字。在 Posit Workbench 中渲染时效果很好。

但是,当我将结果发布到 Posit Connect 时,它失败了:

sub.qmd
无法访问在
main.qmd
中创建的值。

到目前为止我所做的:

  1. 使用

    environment()
    ,两个文件似乎都处于同一环境中(R_GlobalEnv),因此似乎不存在范围问题(?)。我已经在
    main.qmd
    中使用该对象创建了一个环境,并将该环境传递给
    knit_child
    。没有运气。

  2. 我已从

    main.qmd
    写入数据库,并尝试从
    sub.qmd
    读取数据。这里发生了一些非常奇怪的事情:在
    a
    中创建并保存的对象 (
    main.qmd
    )(由
    DBI::dbWriteTable(con, "a", data.frame(a = a))
    保存)显示在
    DBI::dbListTables(con)
    中对
    sub.qmd
    的调用中,但是当我尝试读取
    a
    时从表中 (
    DBI::dbReadTable(con, "a")$a
    ) 连接渲染失败。

  3. 我尝试使用引脚包创建引脚。结果相当于2中的结果。

  4. 我尝试将数据保存为

    a.rds
    中的
    main.qmd
    并从
    sub.qmd
    中读取。再次,如 2 中所示。

发生了什么,如何访问在

main.qmd
中创建的对象?
Reprex(无保存):

main.qmd:

sub.qmd

sub.qmd:

## Main This is from the main document ## Sub ```{r} #| results: asis for (i in c(1,2)) { res <- knitr::knit_child("sub.qmd", quiet = TRUE) cat(res, sep = "\n") } ```

最小的、可重现的示例 2(使用 .rds 保存/读取)。

在示例中,

```{r} print(paste("sub:", i)) ```

为 TRUE,但

file.exists("a.rds")
会引发错误...
main.qmd:

readRDS("a.rds")

sub.qmd:

## Main This is from the main document: ```{r} a <- 1 saveRDS(a, "a.rds") ``` ## Sub ```{r} #| results: asis cat( knitr::knit_child("sub.qmd", quiet = TRUE) ) ```

	
r knitr quarto
1个回答
0
投票
This is from the sub document: ```{r} file.exists("a.rds") # a <- readRDS("a.rds") # print(a) ```

文件进行连接时,似乎以任意顺序运行所有文件。如果其中一个文件用作子文档并使用仅在主脚本中定义的变量,则部署将失败。

要解决此问题,如果 quarto 尝试将子文档渲染为独立文件,您可以优雅地终止渲染。假设主脚本中定义了

.qmd

variable_name

这应该让您部署所有文件并且它应该按预期工作。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.