2017-06-05 37 views
1

我试图创建一个简单的应用程序,它通过一个因子的级别绘制连续变量的平均值。 用户选择几个因素中的一个进行分组,并选择连续变量进行平均。该应用程序应该使用ggplot显示该图。很容易让这个功能在闪亮的环境下工作,但我正在努力让它在应用程序中运行。 我知道问题在于我对NSE和SE的理解不够,但是在查看几个小时的文档并测试各种版本之后,这是我能想到的最好的。这似乎是一个常见问题,但我看不到有关堆栈溢出问题的答案。

我使用泰坦尼克数据集作为一个例子 我得到以下:

警告在mean.default(输入$ ContVar):参数不是数字或 逻辑:返回NA 除了错误,平均值不会在情节呈现时发生变化。

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

也许[这](https://stackoverflow.com/questions/25211916/passing-user-specifications-as-arguments-to-dplyr-within-shiny?rq=1)会有所帮助。 – SBista

+0

从上面的链接我想出了这一点。 (平均值=平均值), list(col = as.symbol(input $ ContVar))))%>(% % ggplot(aes_(x =〜MeanFreq,y = input $ FactVar))+ geom_point()' – SBista

+0

感谢SBista关注此问题。上面的解决方案在运行代码时没有解决问题。我会阅读上面的链接寻找线索。 – Reric

回答

0

这里有一个选择,尽管它不使用dplyr。

我使用聚合并显式命名结果列,所以我可以稍后在ggplot中调用这些名称。

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() 
    }) 
}) 
相关问题