【问题标题】:How to use the envir argument in knit_child?如何在 knit_child 中使用 envir 参数?
【发布时间】:2014-06-03 07:40:20
【问题描述】:

我正在编写一个 R 包,其中有这样一个 Rmd 模板:

child.Rmd:

```{r}
print(x)
```

还有这样一个功能:

child <- function(){
  myenv <- new.env()
  assign("x", 0, envir=myenv)
  # knit: 
  output <- knit_child("child.Rmd", envir=myenv)
  return(output)
}

然后我编织这样一个文件:

```{r, echo=FALSE}
library(mypackage)
```

`r child()` 

但这不起作用,输出是:

print(x)
## Error: object 'x' not found

下面是一个自带的例子,不涉及任何包,不知道这是否真的等价,我真正需要的是包结构:

```{r}
child <- function(){
  myenv <- new.env()
  assign("x", 0, envir=myenv)
  # knit: 
  output <- knit_child("child.Rmd", envir=myenv)
  return(output)
}
```

`r child()` 

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    这应该在 knitr (>= v1.6.3) 的 development version 中修复:knit_child() 获得了一个新参数 envir,您可以将任意环境传递给它.

    【讨论】:

      【解决方案2】:

      knit_child 似乎没有将envir 传递给knit。我真的不知道为什么。

      您可以做的一件事是将myenv 移到函数之外,以便孩子可以使用它。

      ```{r}
      myenv <- new.env()
      child <- function(){
        assign("x", 0, envir=myenv)
        # knit: 
        output <- knit_child("child.Rmd")
        return(output)
      }
      ```
      
      `r child()` 
      

      child.Rmd

      ```{r}
      print(get('x', envir=myenv))
      ```
      

      【讨论】:

      • 不错的主意,谢谢。我仍然想知道为什么knit_child 似乎忽略了envir 参数(@Yihui 可以帮忙吗?)
      • @StéphaneLaurent 你说得对,knit_child() 曾经忽略了envir。我刚刚修好了。
      猜你喜欢
      • 2015-05-18
      • 2013-07-22
      • 1970-01-01
      • 2020-12-12
      • 2015-10-15
      • 2018-05-23
      • 2019-12-17
      • 2015-05-21
      • 2021-10-01
      相关资源
      最近更新 更多