【发布时间】:2021-07-18 11:33:12
【问题描述】:
我的要求是每当单击按钮时从闪亮的应用程序运行脚本,并在脚本运行后在 UI 中显示结果。
我在服务器内部尝试了以下操作,但 UI 仅在我重新加载应用程序时才会显示更新的结果。
source("recalculate.R", local = TRUE)
以下内容根本不起作用。
observeEvent(input$recalculatebtn, source("recalculate.R", local = TRUE))
谁能帮我解决这个问题?
在下面添加一个非常基本的示例案例。
数据:
TableA = data.frame(A = c(1:3), B = c(4:6))
重新计算.R:
TableC = data.frame(C = TableA$A * TableA$B)
用户界面:
ui = shinyUI(
fluidPage(
sidebarPanel(
conditionalPanel(condition = "input.tabselected == 'tab1'", actionButton("recalcbtn", "Recalculate"))
),
mainPanel(uiOutput("mainpanel"))
)
)
服务器:
server = function(input, output, session) {
output$mainpanel = renderUI({
tabsetPanel(
tabPanel("ModifyTableA", value = 'tab1', rHandsontableOutput("OTableA")),
tabPanel("UpdatedValues", value = 'tab2', DT::dataTableOutput("OTableC")),
id ="tabselected"
)
})
indat <- reactiveValues(data=TableA)
output$OTableA =
renderRHandsontable({
indat$data <- TableA
rhandsontable(indat$data)
})
output$OTableC = DT::renderDataTable(TableC)
observeEvent(input$recalcbtn,
{
TableA <<- input$OTableA
source("Recalculate.R", local = TRUE))
}
}
【问题讨论】:
-
recalculate.R的结果应该是响应式表达式。你可以使用reactiveValues。如果您没有成功,请使用MRE of the remaining problems 编辑您的帖子。 -
感谢您的回复。我添加了一个我想要实现的示例场景。如果您能帮助我,那就太好了。
-
注意点:在本例中,我想修改第一个选项卡中的值,然后单击重新计算。然后脚本必须运行并刷新值。作为附加信息,在我的实际场景中,我还提供了在第一个选项卡中上传 excel 文件的选项,并且 excel 数据将显示在选项卡 1 中。
标签: r shiny shinydashboard shinyapps shiny-reactivity