2016-07-10 9 views
0

Dynamic ggvis object in Shinyと同じトピックで既に回答がありましたが、私はまだ同様のコードを積み重ねていますが、なぜそれほど理解できません。ggvisチャートを光沢のある外部ソースから埋め込む方法は?

ui.R

library(shiny) 
library(ggvis) 
shinyUI(fluidPage(

    fluidRow(titlePanel("My app")), 

    fluidRow(
      column(3, 
       tags$h1('Menu'), 
       radioButtons('colors', label = 'select bars color', 
            c("Red"='red','Green'='green','Blue'='blue')) 
       ), 
      column(9, 
       tags$h1("hello"), 
       ggvisOutput('test1'), 
       tags$h2("Chosen color is",textOutput('testText', inline = T)) 
       ) 
    ) 
    ) 
) 

server.R

library(shiny) 
library(ggvis) 
shinyServer(function(input, output) { 
source("charts.R") 
    output$testText <- reactive({ input$colors }) 
    input_color <- reactive({ input$colors }) 
    # cars %>% 
    # ggvis(~speed, fill:= input_color) %>% 
    # layer_bars() %>% 
    # bind_shiny("test1", "test1_ui") 
    chart1() %>% 
    bind_shiny("test1", "test1_ui") 
}) 

charts.R

chart1 <- reactive({ 
    cars %>% 
    ggvis(~speed, fill:= input_color) %>% 
    layer_bars() 
}) 

私はを呼び出すしたいと思いますからcharts.Rへ、server.Rへ。 server.Rのコメントコードを使用すると、ggvisはすべて動作しますが、(非コメントコードのように)charts.Rからggvis関数を呼び出そうとしたときには機能しません。

また、複数の.Rスクリプトを作成することをお勧めしますか、適切なモジュールを用意する必要がありますか?

答えて

1

あなたのスクリプトで2つの物事を編集する必要があります。

  1. あなたが複数のファイルにサーバーやUIコードを分割したい場合は、それぞれのファイルをロードするためにsource(local=TRUE)を使用することができます。これをコードをインラインにすると考えることができます。ソースファイルのコードは、テキストをコピーして貼り付けたのと同じスコープで表示されます。

    library(shiny) 
    library(ggvis) 
    
    shinyServer(function(input, output) { 
    
    source("charts.R", local = T) 
    
    output$testText <- reactive({ input$colors }) 
    input_color <- reactive({ input$colors }) 
    
    chart1 %>% 
    bind_shiny("test1", "test1_ui") 
    
    }) 
    

  2. 反応オブジェクト同士でしか反応式で括弧で呼び出されたかそこら*表現

をレンダリングする必要があります(臆面もなくhereからコピー)、あなたのserver.Rには次のようになります。

関連する問題