2017-10-11 5 views
1

Je suppose qu'il s'agit d'un problème lié à NSE. Mais pourquoi ces deux approches ne fonctionnent-elles pas et comment puis-je les faire fonctionner?La fonction purrr et ggplot n'affiche pas l'intrigue (problème NSE)

temp1 <- function(x){ 
    iris %>% 
    ggplot(aes(Sepal.Length, Sepal.Width)) + 
    geom_point() + 
    facet_wrap(as.formula(paste("~", x))) 
} 
walk('Species', temp1) 


temp2 <- function(x){ 
    x <- as.name(x) 
    iris %>% 
    ggplot(aes(Sepal.Length, Sepal.Width)) + 
    geom_point() + 
    facet_wrap(~ x) 
} 
walk('Species', temp2) 

Répondre

0

Pour moi, cela ne semble pas être un problème NSE. Si vous lisez ?walk il est dit (souligné par moi):

promenade() appelle .F pour son effet secondaire et renvoie l'entrée d'origine

Essayez:

t <- walk('Species', temp1) 
t 
#[1] "Species" 

Je pense que vous pouvez obtenir ce que vous voulez si vous ajoutez une impression explicite à votre ggplot. Par exemple. changer temp1 être:

temp1 <- function(x){ 
    print(iris %>% 
     ggplot(aes(Sepal.Length, Sepal.Width)) + 
     geom_point() + 
     facet_wrap(as.formula(paste("~", x)))) 
} 
+0

Cela a du sens. Pouvez-vous commenter pourquoi le faire (alternativement) via la tuyauterie ne fonctionne pas. C'est '...%>% print()'. – student

+2

@student, car si vous utilisez un simple piping, vous passerez l'objet 'facet_wrap()' à 'print'. Si vous voulez piper, vous pouvez grouper le tout avec '()', puis le passer à 'print'. Quelque chose comme '(iris%>% ...)%>% print()' –