我正在创建闪亮的应用程序。用于计算风险分数,用户将在其中上传输入文件并选择输入,例如种族,计算分数的类型和疾病。选择所有输入并上传文件后,我的应用程序。用户单击操作按钮时将运行,并显示图形和数据框之类的输出
我正在使用 observeEvent 来控制我的App不必要的触发(带有一个eventExpr的multple handleExpr ),这是我的简化代码版本。很抱歉,我的代码不可复制。
observeEvent(input$action,{
isolate(system2("bash_script/plink.sh",args = c(input$file$datapath,input$type,input$sum_stat,input$Disease,input$Ethnic,input$Ref)))
output$table_score <- renderDataTable({
percentile <- read.csv("../output/score_percentile.csv",header = T, sep = "\t")
}, selection = "single")
output$table_variant <- renderDataTable({
varaints_in_sample <- fread("../output/summary.csv", header = T, drop = 1)
})
#Plot Graph
output$plot <- renderPlot({
s <- input$table_score_cell_clicked
plot("../output/score_percentile_plot.csv",s,"analysis")
})
})
我的问题是,当我首次运行应用程序时,一切都是可控的。 但是,如果我想选择新输入。例如,我将输入疾病从心脏病变为另一种疾病。我的应用程序。尽管我没有不点击操作按钮,但仍会不必要地触发该操作。
因此,有没有办法将 observeEvent 与一个evenExpr一起用于多个handleExpr
感谢大家的帮助!
答案 0 :(得分:-1)
我认为,这是您问题的简化示例。解决方案是将所有input$...
放在isolate()
内。
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30),
actionButton('action', 'Click')
),
mainPanel(
plotOutput("distPlot")
)
)
)
server <- function(input, output) {
output$distPlot <- renderPlot({
req(input$action)
# generate bins based on input$bins from ui.R
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = isolate(input$bins) + 1)
# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
}
shinyApp(ui = ui, server = server)