如何在knit_child中使用envir参数?

时间:2014-06-03 07:40:20

标签: r knitr r-markdown

我正在编写一个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()` 

2 个答案:

答案 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))
```