首页 > 解决方案 > 更新重复条目的相应数值

问题描述

我正在构建一个闪亮的应用程序,其中有多个输入字段,如Scenario、和。现在该字段可以有重复的条目,但其他字段具有与该字段中的重复值相对应的不同数值。问题是我无法更新每个重复条目的值。当对重复条目进行选择时,数值未更新并保持空白。 Area_CropArea_WaterArea_ForestScenarioScenarionumericInput

我已使用 中的selectize参数selectInput来呈现成功完成其工作的重复条目,但即使updateNumericInputobserveEvent. 但是observeEvent适用于非重复条目,但不适用于重复条目,我不知道为什么。在代码中,我尝试根据场景字段中的值更新数字输入。我已经将代码重新创建为一个非常基本的代码,以及一个包含重复条目和单个条目的示例数据框。

   df <- data.frame(Scenarios = c(rep("Land",3),"Land_1"), Area_Crop = 
   c(100,200,300,400), Area_Water = c(40,50,60,70), Area_Forest = 
   c(150,250,350,450))

   library(shiny)

   ui <- fluidPage(h4("Updating duplicate entries"),
            selectInput("scenario", "Scenario", df$Scenarios, selectize = 
                         FALSE),
            numericInput("crop", "Crop Area", min = 0, max = 1000, value 
                         = df$Area_Crop, step = 0.5),
            numericInput("water", "Water Area", min = 0, max = 1000, 
                         value = df$Area_Water, step = 0.5),
            numericInput("forest", "Forest Area", min = 0, max = 1000, 
                         value = df$Area_Forest, step = 0.5)
           )

     server <- function(input, output, session) {
               observeEvent(input$scenario,
                updateNumericInput(session,"crop", "Crop Area", 
                 max= 50000, min= 0, value =
                 df$Area_Crop[df$Scenarios ==input$scenario],step = 0.1))

                observeEvent(input$scenario,
                 updateNumericInput(session,"water", "Water Area",     
                  min = 0, max = 1000,value =
               df$Area_Water[df$Scenarios==input$scenario],step = 0.1))

              observeEvent(input$scenario,
                  updateNumericInput(session,"forest", "Forest Area", 
                  min= 0, max = 1000,value = 
               df$Area_Forest[df$Scenarios==input$scenario],step = 0.1))
            }

         shinyApp(ui = ui, server = server)

正如您在运行代码后看到的那样,单个条目 ieLand_1正在更新,而不是重复条目 ie Land。我希望这个重复的条目也可以使用相应的行值进行更新。

我试图解决这个问题已经有一段时间了,但没有任何成功。我是 R 和 Shiny 的新手,因此,任何人的帮助都将受到高度赞赏。

标签: rshiny

解决方案


在您的numericInput行中,您为参数提供了一个向量 (df$Area_Crop等,n = 4) valuenumericInput为 1 个值。你希望numericInput用 4 个值做什么?

你注意到你的控制台了吗?在运行代码时,它给出了很多警告,表明有问题。3次,其实。这暗示你做错了 3 次。因此,通过注释掉几乎相同的 3 个中的 2 个来查找错误,并查看警告是否继续。当它出现时,您只需查看 3 个重复项中的 1 个即可找到错误的根源。

接下来,您有 3 个重复条目。input$scenario可以取值“Land”、“Land”、“Land”或“Land_1”。您希望如何区分“土地”、“土地”和“土地”?

这就是您的子集表达式中发生的情况:[df$Scenarios==input$scenario]. 在右侧,您有一个值,在左侧df$Scenarios,它是一个具有值“Land”、“Land”、“Land”和“Land_1”的向量。当input$scenario是“土地”时,该表达的结果是什么?df$Area_Forest[df$Scenarios==input$scenario]这就引出了下一个问题,即当input$scenario是“土地”时表达式的结果是什么?当您将该结果用于value期望单个值的参数时会发生什么?

由于您是 R 新手,因此我不会直接回答您的问题,因为您需要学习调试代码并从这些错误中学习。但答案在上面被大量暗示。


推荐阅读