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()` 
.

È stato utile?

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))
```
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top