【发布时间】:2020-12-01 07:37:37
【问题描述】:
我使用 R 已经有一段时间了,但 R shiny 对我来说似乎完全是一门外语。
我有一个使用 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)
再次感谢您的帮助。
【问题讨论】:
标签: r shiny rhandsontable