2017-10-12 5 views
1

J'essaye d'écrire une fonction universelle pour générer des graphiques de dispersion ggplot2 basés sur l'entrée de l'utilisateur. Voilà ce que j'ai jusqu'à présent:Erreur d'argumentation non-numérique dans la fonction utilisateur ggplot2

G.Point <- function(USER2, USER3, USER4, X, Y){ 
Point <<- Plot.data + geom_point(
aes_string(x = USER2, y = USER3, colour = USER4) + 
    xlab(X) + 
    ylab(Y)) 
} 
G.Point("USER2", "USER3", "USER4", "X", "Y") #These are called something else in actual code. 
plot(Point) 

Cela revient sans cesse l'erreur « argument non numérique à l'opérateur binaire », mais pour autant que je peux dire que je ne suis pas la création d'un opérateur binaire donc mes entrées non numériques ça devrait aller. Ce code a bien fonctionné avant que je commence à essayer de spécifier l'étiquette x et y.

Je dois manquer quelque chose de stupide car je suis nouveau à écrire mes propres fonctions dans R.

Merci à l'avance.

Répondre

0

je suppose que l'erreur serait de ne pas fermer les accolades

geom_point(
    aes_string(x = USER2, y = USER3, colour = USER4)) 

En outre, il est préférable de ne pas utiliser <<-. Au lieu de cela

G.Point <- function(USER2, USER3, USER4, X, Y){ 
    print(Plot.data + 
     geom_point(aes_string(x = USER2, y = USER3, colour = USER4)) + 
     xlab(X) + 
     ylab(Y)) 
    } 
G.Point("USER2", "USER3", "USER4", "X", "Y") 

NOTE: Un exemple reproductible aurait été mieux

+0

Merci pour cela, je savais que ce serait quelque chose d'évident. Juste rapidement ce qui ne va pas avec l'utilisation de << - pour affecter à une variable? Idéalement, j'aimerais que le graphique soit stocké dans une variable pour être appelé plus tard. –

+0

@ Matt.TW Il s'agit d'une affectation globale. Dans ce cas, il n'est pas nécessaire – akrun