2017-09-20 20 views
2

我试图创建R'当您选择不同的“任务组”,改变一个互动的闪亮应用。该图是密度图表,用于跟踪案例的解析时间(在应用程序外正常工作)。无qplot不工作

为什么密度图显示不出来,当我运行的应用程序?

我不知道问题出在哪里,但是当我尝试运行应用程序,情节永远不会呈现和侧面面板上的选择显示了同一组的多个条目(我只是想为每个组)...和R坠毁一半的时间。

如果我使用较小的数据集(1000行,3列),应用程序不会崩溃,但有没有方法可以改进代码,使其与我的数据集一起运行(约50,000行和3列)?

不幸的是,我不能共享实际的数据,但这里是我生成和测试的模拟数据 - 只有相同的问题R不会崩溃,因为它是一个较小的数据集。下面的代码将运行,但在应用程序,我只看到了钥匙 - 无图,当你调整窗口大小的缩放比例不改装;

下面的代码;

library(shiny) 
library(ggplot2) 

trax_cond <- data.frame(
    id = 1:6, 
    Assigned_Group3 = c("District of Columbia", "Ohio", "Oklahoma", "Tennessee", "Tennessee", "New York"), 
    Total.Time.Days = c(5.9, 9.1, 7.8, 3, 8.3, 12.2) 
) 
#check variable class in each column 
sapply(trax_cond, class) 
trax_cond$Assigned_Group3 <- as.factor(trax_cond$Assigned_Group3) 
trax_list <- as.list(trax_cond) 

ui <- fluidPage(
    sidebarPanel(
    selectInput(inputId = "Assigned_Group3", label = "Assigned Groups:", choices = trax_list$Assigned_Group3), 
    mainPanel(
    tags$h1("Density Plot"), 
    plotOutput("P1") 
    ) 
) 
) 

### 
server <- function(input, output){ 

    selectedData <- reactive({ 
    trax_cond[,trax_cond$Assigned_Group3] 
    }) 


    output$P1 <- renderPlot({ 
    library(ggplot2) 
    qplot(Total.Time.Days, data=trax_cond, geom="density", fill=Assigned_Group3, alpha=I(.5), 
      main="Distribution Days to Resolve", xlab="Resolution Time (Days)", 
      ylab="Density") 
    }) 
} 

shinyApp(ui,server) 

这将产生: enter image description here

,如果我调整窗口大小的输出被切断 enter image description here

如何解决这些问题,并确保输出调整大小时你调整窗口的大小?

+0

当要求帮助你应该包括一个[再现的示例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)配有样本输入数据。它不一定是你的真实数据。例如,可以随意使用内置数据集。但是现在我看到很多问题无法轻松解决,无需进行测试。你看了[光泽教程](https://www.rstudio.com/resources/webinars/shiny-developer-conference/)了吗?我认为这可能会消除很多混乱。 – MrFlick

+0

@MrFlik感谢您的建议 - 我会在第二个添加一些示例数据 – ellie

+0

我已经编辑了这个问题,所以它应该更容易复制。请让我知道是否需要更多细节。 – ellie

回答

0

没有能够测试代码,一个错误,我看到的是服务器的代码中:

selectedData <- reactive({ 
trax_cond[trax_cond$Assigned_Group3] 
}) 

这应该是:

selectedData <- reactive({ 
trax_cond[,input$Assigned_Group3] 
}) 

希望这有助于。

编辑:

请参见下面的代码有一些小的修改到你:

当您通过从UI到服务器指定的输入的用户,则使用输入$ inputId访问输入。如输入$ Assigned_Group3所示。 随着反应性数据,则指的是反应性数据在qplot命令selectedData()。

library(shiny) 
library(ggplot2) 

trax_cond <- data.frame(
    id = 1:21, 
    Assigned_Group3 = c("District of Columbia", "Ohio", "Oklahoma", 
"Tennessee", "Tennessee", "New York"), 
Total.Time.Days = c(5.9, 9.1, 7.8, 3, 8.3, 12.2) 
) 
#check variable class in each column 
sapply(trax_cond, class) 
trax_cond$Assigned_Group3 <- as.factor(trax_cond$Assigned_Group3) 
trax_list <- as.list(trax_cond) 

ui <- fluidPage(
    sidebarPanel(
    selectInput(inputId = "Assigned_Group3", label = "Assigned Groups:", 
    choices = trax_list$Assigned_Group3), 
    mainPanel(
    tags$h1("Density Plot"), 
     plotOutput("P1") 
    ) 
) 
) 

### 
server <- function(input, output){ 

    selectedData <- reactive({ 
    trax_cond[trax_cond$Assigned_Group3 == input$Assigned_Group3,] 
    }) 


    output$P1 <- renderPlot({ 
    library(ggplot2) 
    qplot(Total.Time.Days, data=selectedData(), geom="density", alpha=I(.5), 
      main="Distribution Days to Resolve", xlab="Resolution Time 
       (Days)", 
      ylab="Density") 
    }) 
} 

shinyApp(ui,server) 
+0

感谢您的评论。我已经对上面的代码进行了这种更改,但同样的问题仍然存在。 – ellie

+0

你定义的@ellie问题很模糊,你能更具体吗? – PoGibas

+0

@PgGibas当然,我会更具体。我已经为问题添加了截图,显示了这个问题。基本上,没有情节,图像不会调整大小。我不知道情节是否会对不同的输入做出反应,因为没有情节,但看到传说不会改变,我不认为它是这样。这有帮助吗? – ellie