解决R SHINY

时间:2019-10-08 18:40:36

标签: r shiny

我正在创建一个SHINY应用程序,该应用程序使用因子的值对数据框进行子集并绘制条形图。

请注意,数据框已在上一个命令集中融化,以允许在x轴上绘制多个变量。这似乎也阻止了R读取temp中列的名称。

执行该应用程序时,SHINY打开页面,但它迅速关闭并引发以下错误:

  

警告:错误:没有为.clientdata_output__width类型注册处理程序     [没有可用的堆栈跟踪]   错误(函数(名称,val,shinysession)):     没有为.clientdata_out类型注册的处理程序...

我不明白我的代码有什么问题。有人可以帮忙吗?

# create data
temp<-structure(list(id = c("1", "2", "3", "4", "5", "6", "7"), Workshop = c("Peer Jury Workshop", "Peer Jury Workshop", "School-Based Courts", "School-Based Courts", "School-Based Courts", "School Safety in the 21st Century", "School Safety in the 21st Century"), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Engagement", "EncouragedLrg", "Knowledgeable", "LearnNew", "PresenterAgain", "TopicAgain", "Organized", "HandoutsUseful"), class = "factor"),     value = c(1, 1, 5, 3, 5, 4, 5)), row.names = c(NA, 7L), class = "data.frame")


library(shiny);library(plotly);library(tidyverse)
w<-names(temp[ ,c(5)])  # this does not work, why?

  ui <- fluidPage(
      headerPanel("Session Reviewer"),
      sidebarPanel(
          selectInput('Workshop', 'Which workshop?', 
                c("All",unique(as.character(temp$Workshop))))),
      plotOutput(  plotlyOutput('trendPlot', height = "100%")    )  
      )

  server<-function(input,output){
    dataset<-reactive({
      temp
        if(input$Workshop!="All") {dataset<-dataset[dataset$Workshop==input$Workshop,] }  
              })
    output$trendPlot <- renderPlotly({

        p<-ggplot(dataset(),aes_string(x=variable,y=value))+geom_bar(stat='summary',fill='cadetblue3')  
        ggplotly(p)
            })  
            }


shinyApp(ui, server)

1 个答案:

答案 0 :(得分:0)

w<-names(temp[ ,c(5)])

这里有几个问题

首先,您尝试选择只有4列的数据框的第5列的名称。

第二,names(temp)输出一个列表(即没有列),因此按列进行子设置根本不起作用。

类似names(temp)[4]这样的名称会在数据框temp中给您第四个名称,在本例中为"values"。那是你想做的吗?

此外,您的处理程序错误是由将plotlyOutput包装在plotOutput中引起的。只需使用plotlyOutput('trendPlot', height = "100%"),您的应用程序至少会加载。 ggplot调用中的x=variable仍然存在问题,因为未定义variable