如何使用dplyr过滤反应式数据帧

时间:2019-06-06 20:35:26

标签: r shiny

我需要使用dplyr函数(包括过滤器和分组)来操纵反应性数据帧。但是,当我尝试应用过滤器时,出现以下错误消息:

  

错误:“ closure”类型的对象不可子集化

该代码是Shiny应用程序的一部分,而反应数据帧是根据用户输入生成的。下面是代码示例:


## UI

library(shiny)
ui <- dashboardPage(
dbHeader, dashboardSidebar(width=400,sidebarMenu(id = 'sidebarmenu',
 menuItem("Selection",
         selectInput("Value", "Choose type of value",choices = c("NV","MV"), width = '98%'),
         dateInput("fr", label = h5("Date"), value = "2018-06-29",format="yyyy-mm-dd"),
         hr()),
menuItem('X', tabName='',
  menuItem('PE',
           tabName='PE',
                    menuSubItem('CDU',
                    tabName='CDUS')))
         )),
dashboardBody(
    tabItems(
     tabItem("CDUS",
              fluidRow(column(width=9, offset=1,align="center",
                              box(h3(div('CDU',style="color:white")),width = 20,background = "navy"))),
              fluidRow(
                column(width=9, offset=1,align="center",
                       box(DT::dataTableOutput("table93"),width=20)
                )
                )
              )
)))

## SERVER

shinyServer(function(input, output){

  input_fr <- renderText({input$fr})

X1<-reactive({
    X1_0<-sqlFetch(con,"his_bB") 
    X1<-X1_0 %>% filter(as.character(input_fr) %in% FR)
    ## Fixing formats
    X1[,c(9,10,14,56,57)]<<-lapply(X1[,c(9,10,14,56,57)],as.Date,origin= "1899-12-30")
    X1[,c(2,3,4,16,17,18,24,25,26,27,30,31)]<<- lapply(X1[,c(2,3,4,16,17,18,24,25,26,27,30,31)], as.character)
    X1
  })


VAI_D <- reactive(ifelse(input$Value=='NV','VNUS','MVUS'))

output$table93<-DT::renderDataTable({
      cdu<- X1() %>% filter(Inst %in% "Corp" & Pj %in% "DB.") %>%
     select(Mon,Pj,CIN,NT,!!rlang::sym(VAI_D()), Emi,Out) %>% group_by(Mon,Pj,CIN,NT) %>%
        summarise(`TVD`=sum(!!rlang::sym(VAI_D())),`TE`=sum(Emi),
                  `TO`=sum(Out),`NEmi`=`TVD`/`TE`)

 widget<- datatable(cdu)

widget <- widget %>%  
        formatStyle(columns = 1:dim(cdu)[2])


      widget})
}

在运行应用程序时,我遇到前面所述的错误,并且在控制台中收到以下警告:

  

<<-<:错误类型为'closure'的对象的错误不可子

在其他情况下,当尝试应用类似方法时,出现以下错误:

  

错误:没有适用于'filter_'的对象的适用方法   类“ c('reactiveExpr','reactive')”

有人有什么主意吗?

0 个答案:

没有答案