r - 更新重复条目的相应数值
问题描述
我正在构建一个闪亮的应用程序,其中有多个输入字段,如Scenario
、和。现在该字段可以有重复的条目,但其他字段具有与该字段中的重复值相对应的不同数值。问题是我无法更新每个重复条目的值。当对重复条目进行选择时,数值未更新并保持空白。 Area_Crop
Area_Water
Area_Forest
Scenario
Scenario
numericInput
我已使用 中的selectize
参数selectInput
来呈现成功完成其工作的重复条目,但即使updateNumericInput
将observeEvent
. 但是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 的新手,因此,任何人的帮助都将受到高度赞赏。
解决方案
在您的numericInput
行中,您为参数提供了一个向量 (df$Area_Crop
等,n = 4) value
。numericInput
为 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 新手,因此我不会直接回答您的问题,因为您需要学习调试代码并从这些错误中学习。但答案在上面被大量暗示。
推荐阅读
- android - 按钮错误地用drawable内部包装内容
- google-analytics - 我可以复制 GA4 属性吗?
- java - 以编程方式添加新的约束映射 HV000121:无法解析约束映射文件
- java - 在 Flutter 中实现 Firebase 原生广告
- heroku - Heroku PS:Exec with ENV Vars
- javascript - 使用 for 循环和间隔进行 JavaScript 优化
- java - antlr 词法分析器和解析器的转义字符
- python - 为什么张量板图奇怪地弯曲?
- django - Django 在表单字段中使用 setCustomValidity 方法清理
- vue.js - Vue.js - 按需从 url 加载组件并将其注入您的应用程序