Comment utiliser l'envir argument en knit_child?
-
21-12-2019 - |
Question
Je suis en train d'écrire un package R dans lequel j'ai un Mdm modèle:
enfant.Mdm:
```{r}
print(x)
```
et une telle fonction:
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
Puis je tricote un tel fichier :
```{r, echo=FALSE}
library(mypackage)
```
`r child()`
Mais cela ne fonctionne pas, la sortie est:
print(x)
## Error: object 'x' not found
Ci-dessous est un exemple, sans impliquer un paquet, je ne sais pas si c'est vraiment l'équivalent, et ce que j'ai vraiment besoin, c'est la structure du package:
```{r}
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
```
`r child()`
La solution
Cela devrait être résolu dans la version de développement de knitr (>= v1.6.3): knit_child()
a gagné un nouvel argument envir
, et vous pouvez passer à l'arbitraire d'un environnement à elle.
Autres conseils
knit_child
ne semble pas passer envir
pour knit
.Je ne sais pas vraiment pourquoi.
Une chose que vous pouvez faire est de déplacer myenv
en dehors de la fonction, de sorte qu'il est accessible à l'enfant.
```{r}
myenv <- new.env()
child <- function(){
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd")
return(output)
}
```
`r child()`
enfant.Mdm
```{r}
print(get('x', envir=myenv))
```