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()` 
Était-ce utile?

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))
```
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top