Frage

Ich schreibe ein R-Paket, in dem ich eine solche Rmd-Vorlage habe:

Kind.Rmd:

```{r}
print(x)
```

und eine solche Funktion:

child <- function(){
  myenv <- new.env()
  assign("x", 0, envir=myenv)
  # knit: 
  output <- knit_child("child.Rmd", envir=myenv)
  return(output)
}

Dann stricke ich so eine Feile :

```{r, echo=FALSE}
library(mypackage)
```

`r child()` 

Aber das funktioniert nicht, die Ausgabe ist:

print(x)
## Error: object 'x' not found

Unten ist ein in sich geschlossenes Beispiel, ohne dass ein Paket involviert ist. Ich weiß nicht, ob dies wirklich gleichwertig ist und was ich wirklich brauche, ist die Paketstruktur:

```{r}
child <- function(){
  myenv <- new.env()
  assign("x", 0, envir=myenv)
  # knit: 
  output <- knit_child("child.Rmd", envir=myenv)
  return(output)
}
```

`r child()` 
War es hilfreich?

Lösung

Dies sollte in der behoben werden Entwicklerversion von knitr (>= Version 1.6.3): knit_child() hat ein neues Argument gewonnen envir, und Sie können ihm eine beliebige Umgebung übergeben.

Andere Tipps

knit_child scheint nicht zu vergehen envir zu knit.Ich weiß nicht wirklich warum.

Eine Sache, die Sie tun können, ist sich zu bewegen myenv außerhalb der Funktion, damit sie dem Kind zur Verfügung steht.

```{r}
myenv <- new.env()
child <- function(){
  assign("x", 0, envir=myenv)
  # knit: 
  output <- knit_child("child.Rmd")
  return(output)
}
```

`r child()` 

Kind.Rmd

```{r}
print(get('x', envir=myenv))
```
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top