如何在 knit_child 中使用 envir 参数?
-
21-12-2019 - |
题
我正在编写一个 R 包,其中有这样一个 Rmd 模板:
孩子.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()`
解决方案
这应该修复在 开发版本 的 针织物 (>= v1.6.3): knit_child()
获得了新的论据 envir
, ,并且您可以将任意环境传递给它。
其他提示
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()`
子.Rmd
```{r}
print(get('x', envir=myenv))
```
不隶属于 StackOverflow