2016-07-10 10 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() 
}) 

Я хотел бы назвать chart1 от charts.R до server.R. Все работает с ggvis, если я использую прокомментированный код в server.R, но это не происходит, когда я пытаюсь вызвать функцию ggvis от charts.R (как в раскомментированном коде).

Кроме того, как вы думаете, является хорошей практикой для создания нескольких сценариев .R, или я должен идти за правильными модулями?

ответ

1

Вам нужно отредактировать 2 вещи в вашем скрипте:

  1. Если вы хотите разделить сервер или щ кода на несколько файлов, вы можете использовать source(local=TRUE) для загрузки каждого файла. Вы можете подумать об этом, указав код в строке, поэтому код из исходных файлов получит такую ​​же область, как если бы вы скопировали и вставляли текст прямо там. (Бесстыдно скопирована с here)

  2. Реактивные объекты должны вызываться с скобкой только в других реакционноспособных выражений или сделать * выражения

Итак, ваш server.R к должен выглядеть следующим образом:

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") 

})