我使用R已经有一段时间了,但是R闪亮对我来说似乎是一种完全的外语。
我有一个使用rhandsontable的RShiny应用程序,它从rhandsontable的另一列和rhandsontable的外部输入来计算一个新列。当前,当表中的任何条目都被修改时,该表确实会更新所有内容,但我希望尽可能减少用户错误的风险,方法是使rhandsontable响应表内外的更改(首选),或者在单击按钮时重置。
下面的示例是从How to reset to default a reactive rhandsontable?修改而来的,但转载了我的问题。一旦我为rhandsontable添加了一个observeEvent,甚至在我调用外部输入之前,重置按钮就不再工作了。
为了使observeEvent响应外部输入中的更改和表的更改,我尝试进行一个反应性输入(例如,listener <- reactive(c(input$two_by_two$changes$changes, input$reset_input))),将它们都放在observeEvent (例如input$two_by_two$changes$changes | input$reset_input)中,这都会导致Warning: Error in do.call: second argument must be a list错误。
library(shiny)
library(rhandsontable)
server <- shinyServer(function(input, output, session) {
FACTOR <- reactive(input$factor_val)
DF <- data.frame(A = c(1, 2), B = c(2, 4), row.names = c("C", "D"))
DF1 <- reactiveValues(data=DF)
output$two_by_two <- renderRHandsontable({
input$reset_input
rhandsontable(DF1$data)
})
observeEvent(input$two_by_two$changes$changes,
{DF1$data <- hot_to_r(input$two_by_two)
DF1$data[,2] = DF1$data[,1]*FACTOR() }) })
ui <- shinyUI(fluidPage(
actionButton(inputId = "reset_input", label = "Reset"),
br(),
numericInput("factor_val","Multiplier Value",min=0,max=10,value=2),
rHandsontableOutput("two_by_two")
))
shinyApp(ui, server)再次感谢你的帮助。
发布于 2020-08-11 18:15:26
您无法重置的原因是您更改了反应性数据,但从未将其重新设置。我添加了一个新的观察事件来处理这个问题。请看看这是否是你要找的东西。
library(shiny)
library(rhandsontable)
server <- shinyServer(function(input, output, session) {
FACTOR <- reactive(input$factor_val)
DF <- data.frame(A = c(1, 2), B = c(2, 4), row.names = c("C", "D"))
DF1 <- reactiveValues(data=DF)
observeEvent(input$reset_input, {
DF1$data <- DF
})
output$two_by_two <- renderRHandsontable({
#input$reset_input
rhandsontable(DF1$data)
})
observeEvent(input$factor_val, {
req(input$factor_val)
DF1$data <- hot_to_r(req({input$two_by_two}))
DF1$data[,2] = DF1$data[,1]*FACTOR()
})
})
ui <- shinyUI(fluidPage(
actionButton(inputId = "reset_input", label = "Reset"),
br(),
numericInput("factor_val","Multiplier Value",min=0,max=10,value=2),
rHandsontableOutput("two_by_two")
))
shinyApp(ui, server)https://stackoverflow.com/questions/63361539
复制相似问题