如何根据输入在Shiny for R中动态选择图形函数?

时间:2014-09-10 16:51:47

标签: r shiny shiny-server

我试图创建一个页面,其中可以根据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.)

解决此问题的好方法是什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

事实证明,没有必要为不同类型的图形使用不同的渲染函数,renderPlot会这样做。

output$visualization <- renderPlot({
  computed.visualization <- ExecuteVisualization(
    input$visualization.select
  )

  do.call(
    computed.visualization$graphing.function.name,
    computed.visualization$args
  )
})

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