Come utilizzare l'argomento Envir in Knit_Child?
-
21-12-2019 - |
Domanda
Sto scrivendo un pacchetto R in cui ho un modello del genere RMD:
child.rmd:
```{r}
print(x)
```
.
e una tale funzione:
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
.
Allora ho lavorato un file del genere:
```{r, echo=FALSE}
library(mypackage)
```
`r child()`
.
Ma questo non funziona, l'output è:
print(x)
## Error: object 'x' not found
.
Sotto è un esempio autonomo, senza coinvolgere alcun pacchetto, non so se questo è davvero equivalente e ciò di cui ho davvero bisogno è la struttura del pacchetto:
```{r}
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
```
`r child()`
. Soluzione
Questo dovrebbe essere fissato in Versione di sviluppo di KniTr >= V1.6.3): knit_child()
ha acquisito un nuovo argomento envir
e puoi passare un ambiente arbitrario ad esso.
Altri suggerimenti
knit_child
non sembra passare envir
a knit
.Non so davvero perché.
Una cosa che puoi fare è spostarsi myenv
al di fuori della funzione in modo che sia disponibile per il bambino.
```{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))
```
.