我正在编写一个 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 似乎没有通过 envirknit. 。我真的不知道为什么。

你能做的一件事就是移动 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))
```
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top