2014-09-10 75 views
1

我正在嘗試創建一個頁面,其中可以基於R中選擇框的值呈現圖形。目標是根據圖形呈現不同種類的圖形(繪圖,圖表,直方圖等)。選擇。如何根據輸入動態選擇Shiny for 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.) 

什麼是解決這一問題的好方式?

回答

1

一般來說,錯誤意味着你需要做出反應,而你沒有。如果您正在使用從input的值來計算其他的東西你需要用它的反應,就像這樣:

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

然後,你必須引用NewThing爲NewThing()在你的代碼。沒有任何代碼,我不能說你確切的問題是什麼,但可能與在computed.visualization中不使用reactive有關。

+0

謝謝!這似乎是一個非常有用的構造,但我發現我不需要這個複雜的結構了。請看我的答案。 – 2014-09-10 17:57:39

1

事實證明,不需要爲不同類型的圖形使用不同的渲染函數,renderPlot會做。

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

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

我在不正確的假設下工作,不同的圖形對象需要不同的渲染功能。這樣,computed.visualization中返回的任何內容都會被渲染爲情節。

+0

另外,爲了實現類似於我正在嘗試做的事情(即結合了被動和非被動的上下文),[這個'''reactiveValues'上的Shiny'文檔頁面](http://shiny.rstudio.com/reference/shiny /latest/reactiveValues.html)看起來就像去尋求幫助的地方。 – 2014-09-10 18:02:36

相關問題