2016-09-20 2 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 모두에서 두 번 읽을 수 있도록 DF < -readRDS ("./ data/SF2.rds")를 global.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()) 
        }) 
      }) 

이 도움이된다면 알려줘 수정 server.R

입니다.