2012-03-02 4 views
5

Sto tracciando molti grafici simili quindi ho pensato di scrivere una funzione per semplificare l'operazione. Mi piacerebbe passarlo a data.frame e il nome della colonna da tracciare. Ecco che cosa ho provato:Come passare i nomi di colonna a una funzione che elabora data.frames

plot_individual_subjects <- function(var, data) 
{ 
    require(ggplot2) 

    ggplot(data, aes(x=Time, y=var, group=Subject, colour=SubjectID)) + 
    geom_line() + geom_point() + 
    geom_text(aes(label=Subject), hjust=0, vjust=0) 
} 

Ora, se var è una stringa non funzionerà. Non funzionerà neanche se si modifica la parte ggplot su y=data[,var] e si lamenterà di non essere in grado di impostare una chiusura.

Quindi qual è il modo corretto/la migliore pratica per risolvere questo e problemi simili? Come posso passare nomi di colonne in modo facile e sicuro a funzioni che vorrebbero elaborare su data.frames?

+2

Utilizzare invece 'aes_string'. – joran

+1

@joran si potrebbe anche postare come risposta. – Justin

risposta

10

Bad Joran, rispondendo nei commenti!

Si desidera utilizzare aes_string, che consente di passare nomi di variabili come stringhe. Nel vostro caso particolare, poiché sembra che vogliate solo modificare la variabile y, probabilmente vorrete riorganizzare quali estetiche sono mappate in quali geomi. Ad esempio, forse qualcosa di simile:

o forse viceversa, a seconda dei propri gusti.

+0

joran, c'è un modo per mixare aes() e aes_string() nella stessa chiamata ggplot? Ad esempio, se il mio asse x è sempre comune a tutte le geomi, inserendolo nelle chiamate geom sembra una specie di clunky – KarateSnowMachine

+2

@KarateSnowMachine Non è possibile utilizzare sia 'aes' che 'aes_string' nello stesso livello. Puoi sempre mapparlo in 'aes_string' come' x = 'Time'', ecc. – joran

+0

grazie, non avevo realizzato che fosse così facile. – KarateSnowMachine

Problemi correlati