2017-06-05 3 views
1

Ich versuche, eine einfache App zu erstellen, die den Mittelwert einer kontinuierlichen Variablen durch die Ebenen eines Faktors darstellt. Der Benutzer wählt einen von mehreren Faktoren aus, nach denen gruppiert werden soll, und wählt die kontinuierliche Variable als Durchschnittswert aus. Die App soll den Plot mit ggplot anzeigen. Es ist einfach, diese Funktion außerhalb von glänzend zu erhalten, aber ich habe Mühe, es innerhalb der Anwendung zum Laufen zu bringen. Ich weiß, dass das Problem mit meinem mangelnden Verständnis von NSE und SE zusammenhängt, aber nachdem ich die Dokumentation für ein paar Stunden angeschaut und verschiedene Versionen getestet habe, ist dies das Beste, was ich mir vorstellen kann. Dies scheint ein häufiges Problem zu sein, aber ich sehe keine Antworten zu meinem Problem beim Stack-Overflow.

Ich benutze das Titanic-Datensatz als Beispiel ich folgendes:

Warnung in mean.default (Eingang $ ContVar): Argument nicht numerisch ist oder logisch: Rückkehr in die NA Zusätzlich Fehler, der Mittelwert ändert sich nicht, wenn der Plot rendert.

library(shiny) 
    library(dplyr) 
    library(ggplot2) 
    Titan <- as.data.frame(Titanic) 
    Titan <- mutate(Titan, Freq2 = Freq +3) 

    shinyApp(ui = basicPage(selectInput("FactVar", "Factor", choices = names(Titan)[1:4]), selectInput("ContVar", "Cont Variable", choices = names(Titan)[5:6]), plotOutput("surv")), server = function(input, output) { 
     output$surv <- renderPlot({ 
      Titan %>% 
      group_by_(~input$FactVar) %>% 
      summarize_(MeanFreq = ~ mean(input$ContVar))%>% 
      ggplot(aes_(x=~ MeanFreq, y = input$FactVar))+geom_point() 
     }) 
    }) 
+0

Vielleicht [diese] (https://stackoverflow.com/questions/25211916/passing-user-specifications-as-arguments-to-dplyr-within-shiny?rq=1) würde helfen. – SBista

+0

Von dem obigen Link kam ich auf diese. 'eval (substitute (Titan%>% group_by_ (~ Eingabe $ FactVar)%>% summieren_ (MeanFreq = ~ Mittelwert (col)), Liste (col = as.symbol (Eingabe $ ContVar))))%> % ggplot (aes_ (x = ~ MeanFreq, y = Eingabe $ FactVar)) + geom_point() ' – SBista

+0

Danke SBista für die Aufmerksamkeit auf das Problem. Die obige Lösung löste das Problem nicht, wenn ich den Code ausführte. Ich werde den obigen Link nach Hinweisen lesen. – Reric

Antwort

0

Hier ist eine Option, obwohl es nicht dplyr nicht verwendet.

Ich benutze Aggregat und explizite Benennung der resultierenden Spalten, so dass ich später diese Namen in ggplot aufrufen kann.

library(shiny) 
library(ggplot2) 
Titan <- as.data.frame(Titanic) 
Titan <- mutate(Titan, Freq2 = Freq +3) 

shinyApp( 

    ui = basicPage( 
    selectInput("FactVar", "Factor", choices = names(Titan)[1:4]), 
    selectInput("ContVar", "Cont Variable", choices = names(Titan)[5:6]), 
    plotOutput("surv")), 

    server = function(input, output) { 
    output$surv <- renderPlot({ 

    MeanFreq <- aggregate(list(ContVar = Titan[, input$ContVar]), 
          list(FactVar = Titan[, input$FactVar]), 
          mean) 

     ggplot(MeanFreq, aes(x = ContVar, y = FactVar)) + 
     geom_point() 
    }) 
}) 
Verwandte Themen