【问题标题】:r shiny actionButtonr 闪亮的动作按钮
【发布时间】:2015-03-11 05:55:32
【问题描述】:

在我的 ui.R 中有一个 actionButton。

actionButton("myLoader", "Load Data")

更新:server.R 端:

output$myLoader <- reactive({
  cat("clicked!!") #I never see this logged to the console!
})

我看不到正在注册的点击。

此外,在我的 server.r 中,我不确定如何连接它,因为 UI 中没有任何内容直接取决于它将执行的任务。我希望它“获取”一些将加载数据的 R 文件。数据(为简单起见)以一个名为“myDf”的数据框结束。

问题是 ui 已经被响应式函数更新了,比如:

MainDataset <- reactive({ 
... #subset(myDf) based on other input controls like sliders etc.
})

output$myplot <- renderChart2({
    ... #use MainDataset()
})

如何连接操作按钮,以便: - 它可以将所需的数据加载到 myDf 中 - 它是否以某种方式渗透到现有的反应函数,最后是地块?不是在寻找确切的解决方案,只是在 actionButton 的服务器端应该是什么样子的结构中的指针......

我之所以问,是因为所有示例似乎都在更新 UI 中的标签,这与我想要做的不相符。

谢谢!

【问题讨论】:

  • This question 可能有一个类似于你想做的事情的例子
  • 谢谢,@NicE 我看过但不确定如何将该解决方案与我正在做的事情联系起来。实际上,进一步调查,我有更大的问题。我什至无法追踪对我的按钮点击的调用。我会相应地更新我的问题。

标签: r shiny


【解决方案1】:

您可以创建一个reactive 表达式,该表达式依赖于将加载所需数据的按钮。例如:

loadHandler <- reactive({
  #creates a dependency on the button 
  #when the button is clicked, 1 is added to input$myLoader
  #so the if statement will only be executed once the button is clicked.
  if(input$myLoader){
       #load your data here
 }
})

如果您不需要 reactive 表达式返回的内容,您可以改用 observe

【讨论】:

    【解决方案2】:

    经过大量试验和错误,这就是似乎适合我的方法:

    在 server.R 中:

    loadHandler <- reactive({
      input$myLoader #create a dependency on the button, per Shiny examples.
    
      #load data.
      #this is a func that uses 'source()' to run a whole bunch of R files
      #each of which loads data (eg csv file), and sets global dataframes
      #that are then subsetted via other UI elements like sliders etc.
      myloadingFunc(input$input1, input$input2)
    
      #updates a label. Shouldn't need to do this?
      #just put this here in case a reactive() needs to return something...
      "loaded dataset XYZ"
    })
    

    更新:我现在唯一的问题是“loadHandler”在启动时运行,而不是等待按钮被点击。 :-(

    【讨论】:

    • 你可以做if(input$myLoader){myloadingFunc...},这将创建一个对按钮的依赖,if 循环中的内容只有在按钮被点击时才会运行
    • @NicE 哇——太酷了,我不知道这是可能的。非常感谢。如果您想添加它作为答案,我会接受它:-)
    • 谢谢@rstruck,我添加了答案。
    猜你喜欢
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2015-04-29
    • 2015-04-26
    相关资源
    最近更新 更多