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()` 
Foi útil?

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
scroll top