【问题标题】:How to modularize a dynamic ggvis chart in shiny?如何模块化闪亮的动态ggvis图表?
【发布时间】:2016-07-07 16:02:38
【问题描述】:

我的应用程序有一些图表,我想在一个单独的脚本中绘制它们,以便让server.R 更清晰,然后只包含bind_shiny 调用。

另外,因为我想回收我的图表的一些构建块,我想拆分脚本以在更小的代码部分中绘制图表。

好吧,我有一个像这样的 charts.R 文件:

chart1 <- reactive({
  cars %>% 
    ggvis(~speed) 

})

chart2 <- reactive({
  chart1 %>% layer_bars() 
})

当然不需要反应性,但在我的原始应用程序中会。

然后,我想这样调用 server.R 上的图表:

library(shiny)
library(ggvis)
source("charts.R")
shinyServer(function(input, output) {

chart2 %>% 
  bind_shiny("test1", "test1_ui")
})

ui.R

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

  fluidRow(titlePanel("My app")),

    fluidRow(
          column(12,
                 tags$h1("hello"),
                 ggvisOutput('test1')
                 )
    )
   )
  )

当我将所有内容放在一个对象中时,我注意到一切都在charts.R 中有效,但如果我将绘制图表的函数拆分为多个部分,则它不会。但是,像这样的东西是可行的

> a <-  cars %>% 
+   ggvis(~speed)
> a
Guessing layer_histograms()
Guessing width = 0.5 # range / 42
> a %>% layer_bars()

任何人都可以解释如何解决这个问题,以及为什么我的两步法在 R 中有效,但在 Shiny 中无效?

【问题讨论】:

    标签: r shiny ggvis


    【解决方案1】:

    如果您的问题是看不到情节,那是因为在您的第二个recative 语句中,您需要将chart1 引用为chart1()。换句话说,将您的charts.R 更改为

    Charts.R

    chart1 <- reactive({
                cars %>% 
                  ggvis(~speed)
     })
    
    chart2 <- reactive({
               chart1() %>% layer_bars()
     })
    

    如果您想了解有关反应性的更多信息,请查看this 链接。

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 2016-02-22
      • 2014-06-19
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2017-12-09
      • 2016-07-02
      • 1970-01-01
      相关资源
      最近更新 更多