我的应用程序有一些图表,我想将它们绘制在一个单独的脚本中,以便有一个更干净的 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/