闪亮应用中的生存功能问题

时间:2019-12-06 00:48:49

标签: r shiny survival-analysis

最近,我正在使用R中的生存包,以便能够更好地衡量我在医院急诊室中患者的等待时间。但是,显示结果很复杂,并且RStudio的第三方可以理解,因此我正在开发一个Shiny App来显示结果,而不必显示代码并能够快速修改某些元素 当我创建应用程序时,我遇到一个问题,当我要求您使用分位数构建数据框时,在R#200中出现错误:“ rep中的错误:无效的'times'参数。我已经多次审查了该代码,但仍然找不到解决方案。我附上完整的代码 谢谢


ui <- fluidPage(
    titlePanel("Prototipo Tiempos de Urgencia"),

    sidebarLayout(
                 sidebarPanel(
                   selectInput(inputId = "triage",
                               label = "Triage",
                               choices =c("Todos",listadotriage),
                               selectize = FALSE,
                               selected = "Todos"),
                   selectInput(inputId = "tiempo",
                               label = "Tiempo a analizar",
                               choices = c("Diferencia entre Hora de atención y hora de triage" = "60",
                                           "Diferencia ente hora de atencón y hora de admisión" = "61",
                                           "Diferencia ente hora de atencón y hora de alta" = "62",
                                           "Diferencia ente hora de admision y hora de alta" = "63",
                                           "Diferencia ente hora de admision y hora de triage" = "64"),
                               selectize = FALSE,
                               selected = "Diferencia entre Hora de atención y hora de triage"),
                  selectInput(inputId = "atencion",
                               label = "Área Atención",
                               choices = c("Todos",listadoatencion),
                               selectize = FALSE,
                               selected = "Todos"),
                   selectInput(inputId = "alta",
                               label = "Tipo de Alta",
                               choices = c("General" = "74",
                                           "Hospitalizado" = "72",
                                           "Altas" = "73"),
                               multiple = FALSE,
                               selected = "General"),
                   dateRangeInput(inputId = "fecha",
                                  label = "Intervalo de fechas",
                                  format = "dd-mm-yyyy",
                                  start = "2019-11-01",
                                  end = "2019-11-30",
                                  weekstart = 1,
                                  language= "es",
                                  separator = "a")
                 ),
                 mainPanel = dataTableOutput(outputId = "tabla1")

      ))


server <- function(input, output) {

    output$tabla1 <- renderDataTable({
      if (input$triage=="Todos") {
          dat1<-subset(dat1,ifelse(input$atencion!="Todos",dat1$AREA_ATENCION==input$atencion & dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2],
                                   dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2]))

          timesevent<-as.integer(input$tiempo)

          event<-as.integer(input$alta)

          dat3<-dat1[,c(30,timesevent,event)]

          gral<-Surv(dat3[[2]] ,event= as.numeric(dat3[[3]]))
          fit1a<-survfit(gral ~ Medico, data = dat3)
          d1<-as.data.frame(quantile(fit1a,c(0.25,0.5,0.75,0.9,1),conf.int = FALSE)) # estadísticas sobre tiempo de demora según modelo
          data1<-as.data.frame(fit1a$strata)
          setDT(data1,keep.rownames = TRUE)
          data1$rn<-gsub("Medico=","",data1$rn)
          colnames(data1)<-c("Médico","Consultas")
          setDT(d1,keep.rownames = TRUE)[]
          d1$rn<-gsub("Medico=","",d1$rn)
          colnames(d1)<-c("Médico","P.25","P.50","P.75","P.90","P.100")
          datatotal1<-merge(data1,d1,by="Médico")
          datatable(data=datatota1l,caption =paste("Tiempos de atención en Servicio de Urgencia por Médico, por Atención en Servicio",input$atencion,"durante","el período",format(input$fecha[1], format= "%d-%m-%Y"),"a",format(input$fecha[2], format= "%d-%m-%Y"), sep=" "), 
                    rownames = FALSE,extensions= "Buttons",options=list(pageLength=40,dom="Bfrtip", buttons = c("print")) )
      } else {
          dat1<-subset(dat1,dat1$Triage==input$triage)
          dat1<-subset(dat1,ifelse(input$atencion!="Todos",dat1$AREA_ATENCION==input$atencion & dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2],
                                   dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2]))


         timesevent<-as.integer(input$tiempo)

         event<-as.integer(input$alta)

         dat3<-dat1[,c(30,timesevent,event)]

          gral<-Surv(dat3[[2]] ,event= as.numeric(dat3[[3]])) ~ Medico
          fit1b<-survfit(gral ~ Medico, data = dat3)
          d2<-as.data.frame(quantile(fit1b,c(0.25,0.5,0.75,0.9,1),conf.int = FALSE)) # estadísticas sobre tiempo de demora según modelo
          data2<-as.data.frame(fit1b$strata)
          setDT(data2,keep.rownames = TRUE)
          data2$rn<-gsub("Medico=","",data2$rn)
          colnames(data2)<-c("Médico","Consultas")
          setDT(d2,keep.rownames = TRUE)[]
          d2$rn<-gsub("Medico=","",d2$rn)
          colnames(d2)<-c("Médico","P.25","P.50","P.75","P.90","P.100")
          datatotal2<-merge(data2,d1,by="Médico")
          datatable(data=datatotal2,caption =paste("Tiempos de atención en Servicio de Urgencia por Médico, por Categorización",input$triage,"por Atención en Servicio",input$atencion,"durante","el período",format(input$fecha[1], format= "%d-%m-%Y"),"a",format(input$fecha[2], format= "%d-%m-%Y"), sep=" "), 
                    rownames = FALSE,extensions= "Buttons",options=list(pageLength=40,dom="Bfrtip", buttons = c("print")) ) 
      }
    })
}

shinyApp(ui = ui, server = server)```

1 个答案:

答案 0 :(得分:0)

我解决了!!!! 我更改了下几行

dat1<-subset(dat1,ifelse(input$atencion!="Todos",dat1$AREA_ATENCION==input$atencion & dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2],
                                   dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2]))
```
for the next lines:
```
dat3<-subset(dat3,dat3$fechanormal>=input$fecha[1] & dat3$fechanormal<=input$fecha[2])
          ifelse(input$atencion!="Todos",dat3<-subset(dat3,dat3$AREA_ATENCION==input$atencion),NA)
```

Regards!!!