问题描述
我正在创建一个 Shiny 应用程序,但在尝试根据我复杂的 UI 过滤系统过滤数据时遇到了“参数长度为零”错误的问题。
UI 过滤系统的工作原理如下:
客户选择数据的日期范围 客户从 CheckBoxInput 中选择要分析的团队(选择 = Team 1、Team 2) 客户端从 SelectInput 中选择一个分析类别(选择 = 概览、年龄、位置、球员) a) 如果客户端选择“概览”,则不应发生任何事情(这将显示数据平均值的概览) b) 如果客户选择“年龄”,下面会出现一个新的 SelectInput,允许客户选择一个年龄范围进行分析(选择 =“小于 20”、“20-23”、“23-25”、“25-30 ","超过 30") c) 如果客户选择“位置”,下面会出现一个新的 SelectInput,允许客户选择要分析的位置(选择 = 前锋、后卫、守门员) d) 最后,如果客户端选择“玩家”,下面会出现一个新的 SelectInput,允许客户端选择一个玩家来分析他们的个人数据(选择 = 有很多个人玩家可以选择) 在服务器中,我想根据过滤系统创建图。正如您在下面的代码中看到的,基于日期和团队的过滤很容易。但是,当我包含一些 IF 语句(注意我还没有所有必需的 IF 语句)来过滤根据类别过滤器的输入更改的动态过滤器时,我收到“参数长度为零”错误。
我的假设是,当应用打开时,类别过滤器默认设置为“概览”。因此,年龄、位置和玩家过滤器尚不存在,因此服务器无法找到这些过滤器,并显示“参数长度为零”错误。 注意:如果我删除 IF 语句,则错误将被删除(当然,应用程序不会按照我的意愿行事,但这可能有助于深入了解错误具体在 IF 语句中这一事实)。
相关代码如下:
'''
ui <- dashboardPage(
fluidRow(
Box(title = "Athlete Body Composition",plotOutput("plot1")),Box(collapsible =TRUE,title = "Filters",daterangeInput("daterange","Select Date Range",start = "2019-01-01",end = Sys.Date(),min = "2019-01-01",max = Sys.Date(),format = "yyyy/mm/dd",separator = "-"),checkBoxGroupInput("Teaminput","Select Team",c("Team 1","Team 2")),selectInput( "Category","Select Category",c("Overview","Position","Age","Player")),uIoUtput('outputfilter'))
),)
server <- function(session,input,output) {
observeEvent(input$Category,{
categoryfilterinput<- paste(input$Category)
output$outputfilter <- renderUI({
switch(categoryfilterinput,"Position" = selectInput("positioninput","Select Position",choices = c("Forwards","Defencemen","Goalies")),"Age" = selectInput("ageinput","Select Age Range",choices = c("less than 20","20-23","23-25","25-30","more than 30")),"Player" = selectInput("Playernameinput","Select Player",choices = Roster$Playername))
})
})
output$plot1 <- renderPlot({
filtered_data1 <- filter(DataFrame,Date >= format(input$daterange[1]) & Date <= format(input$daterange[2])) %>%
filter(Team %in% input$Teaminput)
if (input$category == "Player") {
filtered_data1 <- filtered_data1 %>% filter(Playername %in% input$Playernameinput)
}
if (input$category == "Overview") {
filtered_data1 <- filtered_data1
}
ggplot(filtered_data1,aes(x= Date,y = Weight)) +
geom_point(size=2)
})
}
'''
任何帮助都会很棒!!
这里是DataFrame的头部
球员姓名日期球队权重
chr 日期 fct dbl
1 人 1 2019-11-09 团队 1 94
2 人 1 2019-11-16 团队 1 96
3 人 2 2019-11-23 团队 2 95
4 人 2 2019-11-30 团队 2 95.2
5 人 1 2019-11-03 Team 1 NA
6 人 1 2019-12-27 Team 1 NA
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)