2014-05-09 11 views
12

Ich glaube, ich bin immer eine Variation der gleichen Frage :(grid.arrange mit Liste der Plots

Ich habe vor kurzem eine Liste von Plots + Tabelle auf grid.arrange mit der do.call Funktion anzuzeigen

library(grid) 
library(ggplot2) 
library(gridExtra) 

g1 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=sin) 
g2 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=tan) 
g3 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=cos) 
g4 <- tableGrob(data.frame(x <- 1:10, y<-2:11, z<-3:12)) 

plist <- list(g1,g2,g3,g4) 
do.call("grid.arrange", c(plist)) 

Dies funktioniert, aber ich brauche „plist“ erzeugt auf die Variable „numruns“ ich dies habe versucht, zu beruhen, aber es funktioniert nicht:

plist2 <- list(paste0("g", seq_len(numruns+1))) 
do.call("grid.arrange", c(plist2)) 

ich glaube, was ich m doing ruft grid.arrange ("g1", "g2", ...) anstatt grid.arrange (g1, g2, ...) auf. Ich löste ein ähnliches Problem vor der Verwendung von lapply, aber das scheint mir in diesem Fall nicht zu helfen, sonst verwende ich es falsch.

Danke für jede Hilfe.

+2

Sie scheinen für 'zu suchen mget'. Dass Sie es brauchen, zeigt an, dass Ihr wirkliches Problem darin besteht, wie Sie die Plots generieren. Sie sollten beim Generieren in eine Liste aufgenommen und nicht als separate Objekte gespeichert werden. – Roland

+0

Danke Roland, ich war schon mal auf mget aufmerksam geworden und habe es leider ohne es zu verstehen benutzt. Es scheint, dass mein Prozess möglicherweise falsch ist? Gibt es ein ähnliches Beispiel, auf das Sie mich verweisen könnten? – user3564760

+1

Haben Sie nach '[r] mget ggplot' gesucht? Ich bin mir ziemlich sicher, dass Sie Beispiele finden werden. –

Antwort

13

Sie mget wie diese verwenden:

plist2 <- mget(paste0("g", 1:4)) 
do.call(grid.arrange, plist2) 

Aber es wäre besser, die Grundstücke in eine Liste zu setzen, wenn sie, wie dies zu schaffen:

funs <- c(sin, tan, cos) 
DF <- data.frame(x=c(0, 10)) 

g <- lapply(funs, function(fun, df) { 
    ggplot(df, aes(x)) + stat_function(fun=fun) 
}, df=DF) 

#g[[4]] <- tableGrob(data.frame(x = 1:10, y = 2:11, z = 3:12)) 
#better for programmatic use: 
g <- c(g, list(tableGrob(data.frame(x = 1:10, y = 2:11, z = 3:12)))) 

do.call(grid.arrange, g) 
+0

Danke Roland. Ich werde jeden Tag daran erinnert, wie viel ich in R lernen muss. Die Verwendung von mget war das, wonach ich gefragt habe, aber danke, dass Sie Informationen darüber enthalten, wie Sie die Plots selbst in eine Liste aufnehmen können. Ich habe diese Erklärung schon einmal gesehen und es scheint die beste Praxis zu sein. – user3564760

Verwandte Themen