2016-09-20 8 views
0

反応スライダーを開発しようとしていますが、なぜ機能しないのか分かりません。「警告:[.data.frame:未定義の列が選択されました] 。 ご協力いただければ幸いです。サブセットのsliderInputの反応的な変更

これまで、私はuiOutput( "slider")を使ってサーバーからオブジェクトを呼び出そうとしました。

ui.r

library(shiny) 
    DF <- readRDS("data/SF.rds") 
    shinyUI(fluidPage(
    titlePanel("Cartera Total - Bancos"), 

    sidebarLayout(
    sidebarPanel(
    helpText("Evolución de la cartera total según entidad bancaria"), 

    selectInput("var", 
    label = "Entidad Financiera", 
    choices = c('B. AZTECA', 
       'B. CENCOSUD PERU', 
       'B. CONTINENTAL', 
       'B. DE COMERCIO', 
       'B. DE CREDITO DEL PERU', 
       'B. FALABELLA PERU', 
       'B. FINANCIERO', 
       'B. GNB', 
       'B. ICBC', 
       'B. INTERAMERICANO DE FINANZAS', 
       'B. RIPLEY', 
       'B. SANTANDER PERU', 
       'CITIBANK', 
       'INTERBANK', 
       'MIBANCO', 
       'SCOTIABANK PERU'), 
    selected = "BANCO AZTECA"), 

    uiOutput("slider") 

), 

mainPanel(
    fluidRow(
     column(12, 
      splitLayout(cellWidths = c("50%", "50%"), 
         plotlyOutput("deuda_dir"), 
         plotlyOutput("deuda_mora")) 
     ) 
     , 
     column(10, 
      tabsetPanel(id = 'Entidad', 
         DT::dataTableOutput("tabla") 
     )) 
    ) 
) 
) 
)) 

server.r:私は、コードをチェックして

library(shiny) 
    library(plotly) 
    library(ggplot2) 
    library(scales) 

    DF <- readRDS("data/SF.rds") 

    ban_sit <- function(df){ 
    # Seleccionas y luego : Ctrl+R 
    p <- ggplot(data = df, 
      aes(x = fec_cierre, 
       y = TotalCreditosDirectos/1000)) + 
geom_line(colour = "midnightblue")+ 
scale_y_continuous(labels = comma)+ 
xlab("Fecha de Cierre")+ 
ylab("Créditos Directos (En MM de Soles)") 
gg <- ggplotly(p) 
gg 
} 
ban_mora <- function(df){ 
p <- ggplot(data = df, 
      aes(x = fec_cierre, 
       y = Deuda_Mora_porc)) + 
geom_line(colour = "firebrick4")+ 
scale_y_continuous(labels = comma)+ 
xlab("Fecha de Cierre")+ 
ylab("Ratio de Mora (%)") 
gg <- ggplotly(p) 
gg 
} 


    shinyServer(
    function(input, output) { 
    tabla_seg <- reactive({ 
    args <- switch(input$var, 
    'B. AZTECA'='B001', # Solo entidades activas 
    'B. CENCOSUD PERU'='B002', 
    'B. CONTINENTAL'='B003', 
    'B. DE COMERCIO'='B004', 
    'B. DE CREDITO DEL PERU'='B005', 
    'B. FALABELLA PERU'='B007', 
    'B. FINANCIERO'='B008', 
    'B. GNB'='B009', 
    'B. ICBC'='B010', 
    'B. INTERAMERICANO DE FINANZAS'='B011', 
    'B. RIPLEY'='B012', 
    'B. SANTANDER PERU'='B014', 
    'CITIBANK'='B020', 
    'INTERBANK'='B023', 
    'MIBANCO'='B024', 
    'SCOTIABANK PERU'='B025') 

    tabla_seg = DF[DF$cod_ent == args] 
}) 

output$slider <- renderUI({ 
    sliderInput("inslider","Slider", 
       min = min(tabla_seg()$fec_cierre), 
       max = max(tabla_seg()$fec_cierre), 
       value = c(min(tabla_seg()$fec_cierre),  
          max(tabla_seg()$fec_cierre)) 
)}) 


tabla_fec <- reactive({ 

    tabla_fec = tabla_seg()[tabla_seg()$fec_cierre >= input$inslider[1] & 
         tabla_seg()$fec_cierre <= input$inslider[2],] 

    tabla_fec[order(tabla_fec$fec_cierre, 
           decreasing = TRUE),] 


}) 

output$deuda_dir <- renderPlotly({ 
    ban_sit(tabla_fec()) 
}) 

output$deuda_mora <- renderPlotly({ 
    ban_mora(tabla_fec()) 
}) 

output$tabla <- DT::renderDataTable({ 
    tab = tabla_fec() 
    row.names(tab) = NULL 
    tab$TotalCreditosDirectos <- formatC(tab$TotalCreditosDirectos, 
             format="d", 
             big.mark=',') 

    tab$Deuda_Mora_porc <- round(tab$Deuda_Mora_porc, 2)            

    tab <- tab[,c("fec_cierre", 
        "TotalCreditosDirectos", 
        "Deuda_Mora_porc")] 
    names(tab) <- c("Fecha de cierre", 
        "Deuda Directa (S/.)", 
        "Mora (%)")    
    DT::datatable(tab) 
}) 
    } 
+0

データを提供する可能性はありますか? –

+0

ここではSF.rdsのサンプルをダウンロードできます:https://1drv.ms/u/s!Aiohja7mVQ6xkB14sqWkrR2dvrw6 –

+1

私が今気づいたことは、tabla_seg = DF [DF $ cod_ent == args]はどの列も選択していないことですおそらくtabla_seg = DF [DF $ cod_ent == args、]でなければなりません。これが状況を改善すれば教えてください... –

答えて

0

。変更されたコードが表示されます。私は、問題は入力$ insliderが呼び出し後にレンダリングすることだと思うtabla_fec < - 反応的。修正されたコードはそれを処理する必要があります。 私はDFがui.Rとserver.Rの両方で2回読むことができるように、DF < --readRDS( "./ data/SF2.rds")をglobal.Rに置いたことに注意してください。

これは修正さserver.R

library(shiny) 
    library(plotly) 
    library(ggplot2) 
    library(scales) 



    ban_sit <- function(df){ 
      # Seleccionas y luego : Ctrl+R 
      p <- ggplot(data = df, 
         aes(x = fec_cierre, 
          y = TotalCreditosDirectos/1000)) + 
        geom_line(colour = "midnightblue")+ 
        scale_y_continuous(labels = comma)+ 
        xlab("Fecha de Cierre")+ 
        ylab("Créditos Directos (En MM de Soles)") 
      gg <- ggplotly(p) 
      gg 
    } 
    ban_mora <- function(df){ 
      p <- ggplot(data = df, 
         aes(x = fec_cierre, 
          y = Deuda_Mora_porc)) + 
        geom_line(colour = "firebrick4")+ 
        scale_y_continuous(labels = comma)+ 
        xlab("Fecha de Cierre")+ 
        ylab("Ratio de Mora (%)") 
      gg <- ggplotly(p) 
      gg 
    } 


    shinyServer(
      function(input, output) { 
        tabla_seg <- reactive({ 
          args <- switch(input$var, 
              'B. AZTECA'='B001', # Solo entidades activas 
              'B. CENCOSUD PERU'='B002', 
              'B. CONTINENTAL'='B003', 
              'B. DE COMERCIO'='B004', 
              'B. DE CREDITO DEL PERU'='B005', 
              'B. FALABELLA PERU'='B007', 
              'B. FINANCIERO'='B008', 
              'B. GNB'='B009', 
              'B. ICBC'='B010', 
              'B. INTERAMERICANO DE FINANZAS'='B011', 
              'B. RIPLEY'='B012', 
              'B. SANTANDER PERU'='B014', 
              'CITIBANK'='B020', 
              'INTERBANK'='B023', 
              'MIBANCO'='B024', 
              'SCOTIABANK PERU'='B025') 

          tabla_seg = DF[DF$cod_ent == args, , drop = FALSE] 
        }) 

        output$slider <- renderUI({ 
          sliderInput("inslider","Slider", 
             min = min(tabla_seg()$fec_cierre), 
             max = max(tabla_seg()$fec_cierre), 
             value = c(min(tabla_seg()$fec_cierre),  
                max(tabla_seg()$fec_cierre)) 
          )}) 


        tabla_fec <- reactive({ 

          if (!is.null(input$inslider[1]) || !is.null(input$inslider[2])) { 
          tabla_fec = tabla_seg()[tabla_seg()$fec_cierre >= input$inslider[1] & 
                  tabla_seg()$fec_cierre <= input$inslider[2], ] 
          } else { 
            tabla_fec <- tabla_seg()   
          } 

          tabla_fec[order(tabla_fec$fec_cierre, 
              decreasing = TRUE), ] 


        }) 

        output$deuda_dir <- renderPlotly({ 
          ban_sit(tabla_fec()) 
        }) 

        output$deuda_mora <- renderPlotly({ 
          ban_mora(tabla_fec()) 
        }) 

        output$tabla <- DT::renderDataTable({ 
          tab = tabla_fec() 
          row.names(tab) = NULL 
          tab$TotalCreditosDirectos <- formatC(tab$TotalCreditosDirectos, 
                   format="d", 
                   big.mark=',') 

          tab$Deuda_Mora_porc <- round(tab$Deuda_Mora_porc, 2) 

          tab <- tab[,c("fec_cierre", 
              "TotalCreditosDirectos", 
              "Deuda_Mora_porc")] 
          names(tab) <- c("Fecha de cierre", 
              "Deuda Directa (S/.)", 
              "Mora (%)") 
          DT::datatable(tab) 
        }) 
        output$letsee <- renderText({ 
          class(tabla_fec()) 
        }) 
      }) 

は、このことができますなら、私に知らせています。

関連する問題