2016-02-04 12 views
5

Cerco di creare più figure in un documento Rmarkdown utilizzando loop o lapply.mutiple (R) figure generate in un documento rmarkdown (knitr chunk)

Lo script R:

require(plotly) 
data(iris) 
b <- lapply(setdiff(names(iris), c("Sepal.Length","Species")), 
      function(x) { 
       plot_ly(iris, 
         x = iris[["Sepal.Length"]], 
         y = iris[[x]], 
         mode = "markers") 
      }) 
print(b) 

funziona bene, ma non riesce quando incluso in un pezzo knitr:

--- 
output: html_document 
--- 

```{r,results='asis'} 
require(plotly) 
data(iris) 
b <- lapply(setdiff(names(iris), c("Sepal.Length","Species")), 
      function(x) { 
       plot_ly(iris, 
         x = iris[["Sepal.Length"]], 
         y = iris[[x]], 
         mode = "markers") 
      }) 
print(b) 
``` 

ho provato a sostituire print(b) con una combinazione di lapplyeval e parse ma solo il l'ultima cifra è stata visualizzata.

Sospetto un problema di ambito/ambiente ma non trovo alcuna soluzione.

Grazie per il vostro aiuto.

risposta

4

Invece di print(b), inserire b in htmltools::tagList(), ad es.

```{r} 
library(plotly) 
b <- lapply(
    setdiff(names(iris), c("Sepal.Length","Species")), 
    function(x) { 
    as.widget(plot_ly(iris, 
      x = iris[["Sepal.Length"]], 
      y = iris[[x]], 
      mode = "markers")) 
    } 
) 
htmltools::tagList(b) 
``` 

Nota questo momento richiede la versione di sviluppo (> = 2.0.29) di plotly on Github.

+0

Grazie per il vostro aiuto. Ma non funziona. Vedo messaggi di avviso: – frdbd

+0

## Avvertenza in charToRaw (testo): l'argomento deve essere una stringa con lunghezza 1 (approssimativamente trad.) – frdbd

+0

Sembra che la funzione tagList() tenga i dati dei grafici come input invece delle cifre generate (in js). – frdbd

3

ho trovato una soluzione "sporco" utilizzando file temporaneo e kniting esso:

```{r,echo=FALSE} 
mytempfile<-tempfile() 
write("```{r graphlist,echo=FALSE}\n",file=mytempfile) 
write(paste("p[[",1:length(p),"]]"),file=mytempfile,append = TRUE) 
write("\n```",file=mytempfile,append = TRUE) 
``` 

`r knit_child(mytempfile, quiet=T)` 

Ma è insoddisfacente.

+0

Funziona come un fascino! –