Como usar o argumento envir em knit_child?
-
21-12-2019 - |
Pergunta
Estou escrevendo um pacote R no qual tenho um modelo Rmd:
criança.Rmd:
```{r}
print(x)
```
e tal função:
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
Então eu tricotei esse arquivo:
```{r, echo=FALSE}
library(mypackage)
```
`r child()`
Mas isso não funciona, a saída é:
print(x)
## Error: object 'x' not found
Abaixo está um exemplo independente, sem envolver nenhum pacote, não sei se isso é realmente equivalente e o que eu realmente preciso é da estrutura do pacote:
```{r}
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
```
`r child()`
Solução
Isso deve ser corrigido no versão de desenvolvimento de tricô (>= v1.6.3): knit_child()
ganhou um novo argumento envir
, e você pode passar um ambiente arbitrário para ele.
Outras dicas
knit_child
não parece passar envir
para knit
.Eu realmente não sei por quê.
Uma coisa que você pode fazer é se mover myenv
fora da função para que esteja disponível para a criança.
```{r}
myenv <- new.env()
child <- function(){
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd")
return(output)
}
```
`r child()`
criança.Rmd
```{r}
print(get('x', envir=myenv))
```
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow