2016-03-15 11 views
6

Nei miei dati ho più paesi e ogni paese ha 5 prodotti. Ho eseguito una regressione per ciascuna combinazione e ora sto cercando di tracciare i valori previsti rispetto ai valori effettivi sullo stesso grafico, per ciascuna combinazione.Tracciare un grafico in R ed esportarlo in Excel in un loop

Ho 10 paesi in totale e ogni paese ha la propria scheda in un file Excel. Dato che ci sono 5 prodotti, questo è un totale di 50 grafici. Voglio tracciare i grafici in R ed esportarli in Excel in un ciclo. Sto usando excel.link pacchetto ggplot e il problema che sto avendo è che i grafici appaiono come spazio vuoto in Excel o se c'era un grafico in R - quel grafico appare al posto del grafico richiesto.

** Nota: ho ricevuto un errore con il primo grafico che diceva "rversion not found", ma ora ho aggiornato il mio RStudio e non ho più ricevuto questo errore. Il grafico viene comunque esportato in bianco oppure viene visualizzato il grafico precedente

Ecco un ciclo semplificato, simile a quello presente nel mio codice. Se eseguo il ciclo manualmente, cambiando ogni volta i, tutto viene esportato correttamente. Se si esegue il for loop, i problemi accadono che ho descritto sopra:

require(excel.link)

set.seed(124)

for(i in 1:5){

# i <- 2 
myseq <- seq(1,100, by=1) 
norm <- rnorm(100) 

mydata <- as.data.frame(cbind(myseq, norm)) 
colnames(mydata) 
ggplot(data = mydata, aes(x=myseq, y=norm, group=1)) + geom_line(size=1, col="blue") + 
    ggtitle(paste("My Plot ", i)) 

y.plot=current.graphics() 
xl[a1] = list(y.plot) 

}

+0

Avete provato a fare un esempio semplificato di grafici 1 e 2? È piuttosto difficile capire dove il grafico 1 stia andando male con tutti i dettagli del mondo reale in gioco. Forse ridurlo a un solo paese, a un prodotto ea un set di dati super-semplice. Indipendentemente da ciò, il mio primo pensiero è che forse il grafico 1 non sta generando una trama e non ha nulla a che fare con 'excel.link'. Hai esportato con successo la trama in un png? – dmp

+0

Ho creato un codice semplice e ottengo lo stesso problema. Se provo a fare il ciclo a mano (cambiando i 5 volte), tutto funziona - ottengo la giusta trama incollata in Excel. Quando eseguo il ciclo for, non funziona. 'for (i in 1: 5) {' ' # i <- 2' ' myseq <- seguenti (1.100, da = 1) '' norma <- RNorm (100) '' mydata <- as.data.frame (cbind (myseq, norma)) ' ' colnames (mydata) ' ' ggplot (data = mydata, aes (x = myseq, y = norma, gruppo = 1)) + '' geom_line (dimensione = 1, col = "blue") + ' ' ggtitle (incolla ("My Plot", i)) ' ' y.plot = current.graphics() ' ' xl [a1] = lista (y. trama) ' '} ' – user1429611

+0

Sarebbe più facile per noi aiutare se hai fatto la tua domanda usando l'esempio più semplice possibile che riproduce il problema.Ad esempio, sto avendo difficoltà a collegare il codice dal tuo commento al codice della tua domanda. Se ha qualcosa a che fare con il ciclo 'for', c'è probabilmente una soluzione semplice che non è correlata a tutti gli altri dettagli. Potrebbe per favore rivedere la domanda per essere più semplice? – dmp

risposta

0

Prima di tutto si dovrebbe stampare esplicitamente ggplot2 grafica nel loop. In secondo luogo, si mettono trame in Excel nello stesso foglio nella stessa posizione. Quindi i tuoi grafici sono posizionati uno sull'altro e vedrai solo l'ultimo grafico in Excel. Codice per la visualizzazione dei grafici su fogli separati:

library(excel.link) 
library(ggplot2) 

set.seed(124) 
xl.workbook.add() # open new workbook 
for(i in 1:5){ 

    myseq <- seq(1,100, by=1) 
    norm <- rnorm(100) 

    mydata <- as.data.frame(cbind(myseq, norm)) 
    colnames(mydata) 
    p = ggplot(data = mydata, aes(x=myseq, y=norm, group=1)) + 
     geom_line(size=1, col="blue") + 
     ggtitle(paste("My Plot ", i)) 

    print(p) ## display ggplot graphics 
    y.plot=current.graphics() 
    xl.sheet.add() ## add new sheet in excel workbook 
    xl[a1] = y.plot 

} 

Codice per la visualizzazione dei grafici sul singolo foglio dall'alto verso il basso:

library(excel.link) 
library(ggplot2) 

set.seed(124) 
xl.workbook.add() # open new workbook 
y.plot = lapply(1:5, function(i) { 

    myseq <- seq(1,100, by=1) 
    norm <- rnorm(100) 

    mydata <- as.data.frame(cbind(myseq, norm)) 
    colnames(mydata) 
    p = ggplot(data = mydata, aes(x=myseq, y=norm, group=1)) + 
     geom_line(size=1, col="blue") + 
     ggtitle(paste("My Plot ", i)) 

    print(p) ## display ggplot graphics 
    current.graphics() 

}) 

xl[a1] = y.plot