当闪亮的应用程序点击按钮运行时,如何运行R脚本



我的要求是,每当单击按钮时,都要从闪亮的应用程序运行脚本,并在脚本运行后在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:

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))
}

}

以下是使用reactiveVal的简化示例
我没有讨论handsontable的细节,这将是另一个问题,但input$OTableA不会这样工作,因为它返回的是一个完整的表对象,而不仅仅是数据。

library(rhandsontable)
TableA = data.frame(A = c(1:3), B = c(4:6))
TableC = data.frame(C = TableA$A )
library(shiny)
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"
)
})
TableC_react <- reactiveVal(TableC)
indat <- reactiveValues(data=TableA)
output$OTableA =
renderRHandsontable({
indat$data <- TableA
rhandsontable(indat$data)
})
output$OTableC = DT::renderDataTable(TableC_react())
observeEvent(input$recalcbtn,
{
#source("Recalculate.R", local = TRUE)
result <- TableC_react()+1 # could be the result of Recalculate
TableC_react(result)
})
}
shinyApp(ui=ui,server)

相关内容

  • 没有找到相关文章

最新更新