我有一个带有2个标签的应用,每个标签都有一个操作按钮。如果按下任一按钮,我希望触发相同的过程。所以我用以下方式写了它:
library(shiny)
ui <- fluidPage(
tabsetPanel(
tabPanel("tab1",
actionButton("btn1","Button 1"),
textOutput("text")
),
tabPanel("tab2",
actionButton("btn2","Button 2")
)
)
)
server <- function(input, output) {
data=eventReactive(c(input$btn1,input$btn2),{
print("Button is pressed!")
print(input$btn1)
print(input$btn2)
iris
})
output$text=renderText({
req(data())
print(head(data()))
"Really? Button is pressed!"
})
}
# Run the application
shinyApp(ui = ui, server = server)
我不明白为什么在按下任何按钮之前应用初始化时会触发eventReactive
表达式。
如果我只使用1个按钮,即input$btn1
而不是c(input$btn1, input$btn2)
,那么我会得到预期的行为,但没有2个依赖项。
有人可以启发我吗?
答案 0 :(得分:1)
eventReactive
有一个参数ignoreInit
,默认为False
,请参阅help(eventReactive)
。
我的问题已解决,修改以下行:
data=eventReactive(c(input$btn1,input$btn2),{
到
data=eventReactive(c(input$btn1,input$btn2),ignoreInit = T,{
我希望这有帮助!
答案 1 :(得分:0)
我的猜测是表达式自动计算为TRUE,因此它在加载时执行。相反,您应该使用{}
to listen from two buttons。
修改后的代码:
library(shiny)
ui <- fluidPage(
tabsetPanel(
tabPanel("tab1",
actionButton("btn1","Button 1"),
textOutput("text")
),
tabPanel("tab2",
actionButton("btn2","Button 2")
)
)
)
server <- function(input, output) {
data=eventReactive({
input$btn2
input$btn1},{
print("Button is pressed!")
print(input$btn1)
print(input$btn2)
iris
})
output$text=renderText({
req(data())
print(head(data()))
"Really? Button is pressed!"
})
}
# Run the application
shinyApp(ui = ui, server = server)