我正在创建一个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)
答案 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
。