【问题标题】:How to dynamically select graphing function in Shiny for R based on input? [duplicate]如何根据输入在 Shiny for R 中动态选择图形函数? [复制]
【发布时间】:2014-09-10 16:51:46
【问题描述】:

我正在尝试创建一个页面,其中可以根据 R 中选择框的值来呈现图形。目标是根据 R 中呈现不同类型的图形(绘图、图表、直​​方图等)到选择。

我的代码是这样的:

shinyServer(function(input, output) {

    computed.visualization <- ExecuteVisualization(
      input$visualization.select
    )

    rendering.function <- SelectRenderingFunction(
      computed.visualization$graphing.function.name
    )

    output$visualization <- rendering.function({
        do.call(
          computed.visualization$graphing.function.name,
          computed.visualization$args
        )
    })
})

但是,我在获取输入值时遇到错误:

Operation not allowed without an active reactive context. 
(You tried to do something that can only be done from 
inside a reactive expression or observer.)

解决这个问题的好模式是什么?

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

    一般来说,这个错误意味着你需要做出一些反应,而你没有。如果您使用来自input 的值来计算其他内容,则需要将其包装在反应式中,如下所示:

    NewThing<-reactive({ function(input$OldThing) })
    

    那么您必须在代码中将 NewThing 称为 NewThing()。如果没有任何代码,我无法说出您的确切问题是什么,但可能与您的 computed.visualization 中未使用 reactive 有关。

    【讨论】:

    • 谢谢!这似乎是一个非常有用的结构,但我发现我不再需要这种复杂的结构了。请看我的回答。
    【解决方案2】:

    事实证明,没有必要为不同类型的图形使用不同的渲染函数,renderPlot 就可以了。

    output$visualization <- renderPlot({
      computed.visualization <- ExecuteVisualization(
        input$visualization.select
      )
    
      do.call(
        computed.visualization$graphing.function.name,
        computed.visualization$args
      )
    })
    

    我在错误的假设下工作,即不同的图形对象需要不同的渲染函数。这样,computed.visualization 中返回的任何内容都会呈现为绘图。

    【讨论】:

    猜你喜欢
    • 2019-06-14
    • 2022-01-02
    • 1970-01-01
    • 2022-01-12
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2018-12-20
    相关资源
    最近更新 更多