【问题标题】:how to Iterate over data frame in shiny app如何在闪亮的应用程序中迭代数据框
【发布时间】:2021-06-23 21:28:55
【问题描述】:

我正在尝试迭代数据框 (values$df) 以便在每行应用一些函数,然后将输出绑定到另一个数据框 (cot$tarifas)。我使用了一个 for 循环,虽然屏幕上没有显示错误,但结果数据框中没有可用的数据 (cot$tarifas) 我没有明白为什么。

我在此处发布了我认为发生错误的代码摘录,但对于可重现的示例,我建议您下载 this folder 中的文件。您应该将代码中的路径更改为保存文件的路径,并将名为“file_to_upload”的文件加载到应用程序。代码有点长,这里就不贴了

  cot <- reactiveValues()
  observe({
    cot$tarifas <- tibble(
      Row = numeric(0)) %>%
      mutate("Fondo" = "", "Region"= "", "Estado"="",
             "Cultivo"= "", "Infraestructura"= "", "Riesgos"= "","Unidad de Riesgo"="",
             "Subramo" = "", "Nivel de S.A." = numeric(0), "Deducible" = "", "Part. Perdida" = "", "Tarifa" = numeric(0))
  })
  
  proxyTable2 <- DT::dataTableProxy("tarifas")
  
  output$envio <- renderDT({
    DT::datatable(cot$tarifas[,-1],
                  rownames = FALSE,
                  escape   = FALSE)
  })
  myTable2 <- isolate(cot$tarifas)
  # I BELIEVE THERE IS SOMETHING WRONG IN THE FOLLOWING REACTIVE
  eventReactive(input$continue,{
    for (j in 1:dim(values$df)[1]) {
      cotizacion <- busca_folios(fondo_edo(), cultivos(),values$df$Fondo[j], values$df$Region[j],values$df$Cultivo[j],
                             values$df$`Sistema de produccion`[j], values$df$`Seguro agricultura protegida`[j],
                             values$df$`Unidad de riesgo`[j], values$df$Riesgos[j], values$df$Deducible[j],
                             values$df$`Participacion a perdida`[j])
      
      if(dim(cotizacion)[1] > 0){
        myTable2 <- bind_rows(myTable2, tibble(Row = rep(1,3)) %>%
                                add_column(cotizacion))
      }else{
        cotizacion2 <- calculo(fondo_edo(),cultivos(),values$df[j,1],values$df$Region[j], values$df$Cultivo[j],
                          values$df$`Sistema de produccion`[j], values$df$`Seguro agricultura protegida`[j],
                          values$df$`Unidad de riesgo`[j], ordena_riesgos(values$df$Riesgos[j]),
                          separa_vector(values$df$Deducibles[j]), separa_vector(values$df$PPs[j]), values$df$Fondo[j])
        
        myTable2 <- bind_rows(myTable2, tibble(Row = rep(1,3)) %>%
                                add_column(cotizacion2))
      }
    }
    replaceData(proxyTable2, myTable2, resetPaging = FALSE)
    cot$tarifas <- myTable2
  })

扩展输出

非常感谢您的帮助,我真的很感激

【问题讨论】:

  • 你有很多问题。您正在将反应器嵌套在反应器中。这没有任何意义。此外,您尝试在反应完成之前在 for 循环中使用它。接下来,您的功能似乎有问题。请确保它们在闪亮之外独立工作。请确保您发布MRE,以便有人可以帮助您。
  • 嗨@YBS,谢谢你的评论。你对嵌套反应是正确的,它没有意义。我更新了代码,以便反应器内部没有反应器,但这不是问题。其次,我的功能在闪亮之外工作正常,它们没有问题,这就是我得到预期输出表的方式;)。所以问题是 col$tarifas 的值没有被新数据替换,我不明白为什么。问题一定在for循环中,但我不知道在哪里
  • 我建议将 myTable2 &lt;- bind_rows(myTable2, tibble(Row = rep(1,3)) %&gt;% add_column(cotizacion)) 更改为 n % add_column(cotizacion))跨度>
  • @YBS 非常感谢您的时间和帮助。我设法解决了我的问题:)

标签: r for-loop shiny


【解决方案1】:

解决了!我让事情变得比需要的更复杂。我将上面的代码更改为以下

output$envio <- renderDT({
    myTable2 <- data.frame()
    for (j in 1:dim(values$df)[1]) {
      cotizacion <- busca_folios(fondo_edo(), cultivos(),values$df$Fondo[j], values$df$Region[j],values$df$Cultivo[j],
                                 values$df$`Sistema de produccion`[j], values$df$`Seguro agricultura protegida`[j],
                                 values$df$`Unidad de riesgo`[j], values$df$Riesgos[j], values$df$Deducible[j],
                                 values$df$`Participacion a perdida`[j])
      
      if(dim(cotizacion)[1] > 0){
        myTable2 <- rbind(myTable2, cotizacion)
      }else{
        cotizacion2 <- calculo(fondo_edo(),cultivos(),values$df[j,1],values$df$Region[j], values$df$Cultivo[j],
                               values$df$`Sistema de produccion`[j], values$df$`Seguro agricultura protegida`[j],
                               values$df$`Unidad de riesgo`[j], ordena_riesgos(values$df$Riesgos[j]),
                               separa_vector(values$df$Deducibles[j]), separa_vector(values$df$PPs[j]), values$df$Fondo[j])
        
        myTable2 <- rbind(myTable2, cotizacion2)
      }
    }
    return(DT::datatable(myTable2 ))
  })

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 2020-06-16
    • 2017-07-27
    • 2014-04-11
    • 1970-01-01
    • 2017-02-02
    • 2013-06-25
    • 2013-07-08
    • 2020-11-03
    相关资源
    最近更新 更多