我试图创建一个页面,其中可以根据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.)
解决此问题的好方法是什么?
答案 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
中返回的任何内容都会以图形的形式呈现。