我正在编写一个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()`
答案 0 :(得分:4)
这应该在 knitr 的development version中修复(&gt; = v1.6.3):knit_child()
获得了一个新参数envir
,而你可以传递一个任意的环境。
答案 1 :(得分:1)
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))
```