Wie verwende ich das Argument envir in knit_child ?
-
21-12-2019 - |
Frage
Ich schreibe ein R-Paket, in dem ich eine solche Rmd-Vorlage habe:
Kind.Rmd:
```{r}
print(x)
```
und eine solche Funktion:
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
Dann stricke ich so eine Feile :
```{r, echo=FALSE}
library(mypackage)
```
`r child()`
Aber das funktioniert nicht, die Ausgabe ist:
print(x)
## Error: object 'x' not found
Unten ist ein in sich geschlossenes Beispiel, ohne dass ein Paket involviert ist. Ich weiß nicht, ob dies wirklich gleichwertig ist und was ich wirklich brauche, ist die Paketstruktur:
```{r}
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
```
`r child()`
Lösung
Dies sollte in der behoben werden Entwicklerversion von knitr (>= Version 1.6.3): knit_child()
hat ein neues Argument gewonnen envir
, und Sie können ihm eine beliebige Umgebung übergeben.
Andere Tipps
knit_child
scheint nicht zu vergehen envir
zu knit
.Ich weiß nicht wirklich warum.
Eine Sache, die Sie tun können, ist sich zu bewegen myenv
außerhalb der Funktion, damit sie dem Kind zur Verfügung steht.
```{r}
myenv <- new.env()
child <- function(){
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd")
return(output)
}
```
`r child()`
Kind.Rmd
```{r}
print(get('x', envir=myenv))
```