2013-03-17 8 views
59

Ich versuche, die Spaltenindizes als Teil einer Funktion, die ich wiederholt verwenden werde, an ggplot zu übergeben. wie:R passiere variable Spaltenindizes nach ggplot2

myplot <- function(df){ 
    ggplot(df, aes(df[, 1], df[, 2])) + geom_point() 
} 

Ich werde immer die erste Spalte als mein x-Variable und die zweite Spalte als meinen y-Variable verwenden, aber die Spaltennamen zwischen Datensatz ändern. Ich habe überall gesucht .. Irgendwelche Ideen?

EDIT:

Dies ist die Antwort, die ich verwendet:

require(ggplot2) 

myplot <- function(df){ 
    ggplot(df, aes_string(colnames(df)[1], colnames(df)[2])) + geom_point() 
} 
+0

Es scheint, dass der Titel Ihrer Frage Paul Hiemstras Antwort entspricht, die die Verwendung von String-Spaltennamen betrifft. Aber der Körper Ihrer Frage betrifft die Verwendung ihres Index, der in der Tat ein doppeltes Flag ist. Ich würde empfehlen, den Hauptteil Ihrer Frage so zu ändern, dass sie der Antwort entspricht. –

+0

@MaxGhenis Beide Fälle (und mehr) werden in Pauls Antwort und in den Kommentaren beantwortet. – N8TRO

+0

Ich sehe das. Das Missverhältnis des Inhalts ist immer noch verwirrend für diejenigen, die darüber stolpern werden; Fragen sollten spezifisch und eindeutig sein. Wenn Sie sie ändern, können Sie auch die Möglichkeit erhalten, als doppelt markiert zu bleiben. –

Antwort

91

Sie die aes_string anstelle von aes verwenden können Zeichenfolge anstelle der Verwendung von Objekten zu übergeben, das heißt:

myplot = function(df, x_string, y_string) { 
    ggplot(df, aes_string(x = x_string, y = y_string)) + geom_point() 
} 
myplot(df, "A", "B") 
myplot(df, "B", "A") 
+0

Danke, es funktioniert, obwohl nicht ideal, weil ich die Spaltennamen manuell geben müsste. Irgendeine Möglichkeit, das zu umgehen? – N8TRO

+8

'aes_string (Spaltennamen (df) [1], Spaltennamen (df) [2])' – baptiste

+0

Im Allgemeinen stellen Sie in 'ggplot2' keine Vektoren in 'aes' bereit. In "aes" stellen Sie eine Zuordnung der Ästhetik der Darstellung zu Spalten in den Daten bereit, ohne dass die Daten in "aes" fest codiert werden müssen. –