R闪亮-用户定义的功能出现问题,在派生变量上加载文件和下拉菜单

问题描述 投票:0回答:1

我正在构建一个具有一个TabPanel的应用程序,用户可以在其中以fst格式上载两个表,该应用程序会创建一个大表,该表将这两个表与其他一些本地存储的参考表连接起来,然后在另一个TabPanel中允许用户可以在最终表的下拉菜单中进行过滤。最终,用户应该能够将过滤后的表格下载为csv文件。我无法使其正常运行,我不知道为什么...

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

########################
#LIBRARY REQUIRED:
########################
.packages = c("shiny","dplyr","networkD3","tidyverse","tidygraph","ggplot2","shinyWidgets","stats","graphics","markdown","ggalluvial","tidyr","gapminder","tidyverse","superheat","ggsci","DT","fst","haven","plotly", "reshape2","tcltk")

# Install CRAN packages (if not already installed)
.inst <- .packages %in% installed.packages()
if(length(.packages[!.inst]) > 0) install.packages(.packages[!.inst])

# Load packages into session 
lapply(.packages, require, character.only=TRUE)


install.packages(.packages)


# Directory: 
setwd("\\\\...")



#Loading reference table for shop:
refshop <- read_sas("refshop.sas7bdat")

#Loading reference table for area:
refarea <- read_sas("reftable_area.sas7bdat")




#############################
#CREATING REFERENCE TABLE _TYPE_ and COLUMN:
############################

creating_reference_table<- function(data_x_sideone) {

  data_x_upd <- data_x_sideone %>% select('_TYPE_', group, area, pod, division,shop, Subdivision,A, B, C) 

  #DATA MANIPULATION TO GET Reference_TableType 
  Reference_TableType <-.....


  return(Reference_TableType)
}



#############################
#USER INTERFACE:
############################

ui <- fluidPage(




  navlistPanel(well = TRUE,

               tabPanel("Files to Load", fileInput("data_x_sideone", "Choose a file for Shop 1", multiple = TRUE, accept = c(".fst")),
                        fileInput("data_x_sidetwo", "Choose a file for Shop 2", multiple = TRUE, accept = c(".fst"))),

               "EXTRACTION",            
               tabPanel("table Creation to download", 
                        uiOutput("select_var1"),uiOutput("select_var2"),uiOutput("select_var3"),
                        downloadButton("dl7", "Download"),tableOutput("table7"))

  )

)



#)





# Define server logic required to plot variables
server <- function(input, output) {

  options(shiny.maxRequestSize=1000*1024^2) 


  data_x_sideone <- reactive({
    infile <- input$data_x_sideone
    if (is.null(infile)) {
      # User has not uploaded a file yet
      return(NULL)
    }

    read.fst(infile$datapath)
  })



  data_x_sidetwo <- reactive({
    infile <- input$data_x_sidetwo
    if (is.null(infile)) {
      # User has not uploaded a file yet
      return(NULL)
    }

    read.fst(infile$datapath)
  })





  Reference_TableType<- reactive({
    creating_reference_table(data_x_sideone())
    return(Reference_TableType)})


  #EXTRACTION TABLE
  output$select_var1 <- renderUI({

    selectizeInput('var1', 'First selection (table filtered by...', sort(unique(Reference_TableType()$variable)),selected = "A" )
  })


  output$select_var2 <- renderUI({

    selectizeInput('var2', 'Second selection (table filtered by...', sort(unique(Reference_TableType()$variable)),selected = "A" )
  })

  output$select_var3 <- renderUI({

    selectizeInput('var3', 'Third selection (table filtered by...', sort(unique(Reference_TableType()$variable)),selected = "A" )
  })

  #Table with type and sum type 
  TableType_filtered <- reactive({ # <-- Reactive function here

    TableType <- Reference_TableType() %>% filter ((Reference_TableType()$variable == input$var1) | (Reference_TableType()$variable == input$var2) | (Reference_TableType()$variable == input$var3)) 

    TableType$sumtype = sum(TableType$type)
    return(TableType)
  })



  #creating table table
  filteredtable <- reactive({

    data_x_sideone <- data_x_sideone() %>% 
      filter(data_x_sideone()$'_TYPE_' %in% TableType_filtered()$sumtype)
    data_x_sidetwo <- data_x_sidetwo() %>% 
      filter(data_x_sidetwo()$'_TYPE_' %in% TableType_filtered()$sumtype)
    table_table <- left_join(data_x_sideone(), data_x_sidetwo(), 
                             by = c("type" = "type", "shop"="shop","area"="area","group"="group","pod"="pod", "division"="division","Subdivision"="Subdivision", "A"="A", "B"="B", "C"="C" ), 
                             suffix = c("_S1", "_S2"))

    #adding reference tables   
    table_table2 <- left_join(table_table, refshop, 
                              by = c("shop"="shop"))
    table_table3 <- left_join(table_table2, refarea, 
                              by = c("area"="area"))

    table_table <- table_table3 %>% slice(1:10)
    return(table_table)

  })


  #visualisation of filtered table table 


  #table table created for extraction
  tabextractionall <- reactive({ # <-- Reactive function here

    data_x_sideone <- data_x_sideone() %>% 
      filter(data_x_sideone()$'_TYPE_' %in% TableType_filtered()$sumtype)
    data_x_sidetwo <- data_x_sidetwo() %>% 
      filter(data_x_sidetwo()$'_TYPE_' %in% TableType_filtered()$sumtype)
    table_table <- left_join(data_x_sideone(), data_x_sidetwo(), 
                             by = c("type" = "type", "shop"="shop","area"="area","group"="group","pod"="pod", "division"="division","Subdivision"="Subdivision", "A"="A", "C"="C", "B"="B" ), 
                             suffix = c("_S1", "_S2"))
    return(table_table)

  })



  output$table7 <- renderTable({ filteredtable() })



  output$dl7 <- downloadHandler(
    filename = function(){"tableFiltered.csv"}, 
    content = function(fname){
      write.csv(tabextractionall(), fname)
    })



}


shinyApp(ui = ui, server = server)
r shiny
1个回答
0
投票

在您的代码中,完成以下分配后:

 data_x_sideone <- data_x_sideone() %>% 
      filter(data_x_sideone()$'_TYPE_' %in% TableType_filtered()$sumtype)
 data_x_sidetwo <- data_x_sidetwo() %>% 
      filter(data_x_sidetwo()$'_TYPE_' %in% TableType_filtered()$sumtype)
 table_table <- left_join(data_x_sideone(), data_x_sidetwo(), 
                             by = c("type" = "type", "shop"="shop","area"="area","group"="group","pod"="pod", "division"="division","Subdivision"="Subdivision", "A"="A", "C"="C", "B"="B" ), 
                             suffix = c("_S1", "_S2"))

变量data_x_sideonedatax_sidetwo已覆盖反应性函数data_x_sideone()data_x_sidetwo(),因此您不能再在左联接中使用这些函数。

© www.soinside.com 2019 - 2024. All rights reserved.