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

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

没错,我有一个 charts.R 文件,如下所示:

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

})

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

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

然后,我想这样调用 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 中无效?

最佳答案

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

Charts.R

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

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

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

关于r - 如何模块化 Shiny 的动态ggvis图表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38250224/

10-12 00:22
查看更多