【问题标题】:How to define a function that calls shiny functions?如何定义一个调用闪亮函数的函数?
【发布时间】:2017-10-20 13:08:45
【问题描述】:

我想定义一个函数,该函数以响应式输入作为参数调用闪亮的函数。对于这个例子:

library(shiny)

ui <- fluidPage(
    actionButton("do", "Click Me")
)

server <- function(input, output, session) {

    clickFunction<-function(x){
        observeEvent(x, {print("got it")})
    }

    clickFunction(x = input$do)
}

shinyApp(ui, server)

我期待

[1] “知道了”

当我单击“单击我”按钮时,却没有输出。

如何让 observeEvent 观察响应式输入?

我认为这可能取决于observeEvent的环境参数,但我没有使用它们的经验。

谢谢你。

【问题讨论】:

  • 通常从server 内部调用observeEvent()。您的示例不起作用,因为未调用 clickFunction() (它不在反应式环境中)。调用observeEvent() 的常用方法是server &lt;- function(input, output, session) {observeEvent(input$do,{print("got it")})}

标签: r shiny


【解决方案1】:

您需要使用反应式包装器传递input$do。您的示例的编码方式,input$do 将在函数被调用时评估一次。

library(shiny)

clickFunction <- function(x){
  observeEvent(x(), {print("got it")})
}

shinyApp(
  fluidPage(actionButton("do", "Click Me")),
  function(input, output, session){      
    clickFunction(reactive({input$do}))
  }
)

另一种方法是引用您的事件表达式,但 input 必须在 clickFunction 的范围内

library(shiny)

shinyApp(
  fluidPage(actionButton("do", "Click Me")),
  function(input, output, session){
    clickFunction <- function(x){
      observeEvent(x, {print("got it")}, event.quoted = TRUE)
    }

    clickFunction(x = quote(input$do))
  }
)

【讨论】:

  • 谢谢 Gregor,能否看看相关问题here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 2018-01-24
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2017-01-23
相关资源
最近更新 更多