我正在熟悉 ggvis,我正在尝试在闪亮中使用它。我无法理解 ggvis 如何从反应式 Shiny 表达式中获取数据。这是来自 ggvis GitHub 存储库的基本应用程序:
ui.R:
shinyUI(pageWithSidebar(
div(),
sidebarPanel(
sliderInput("n", "Number of points", min = 1, max = nrow(mtcars),
value = 10, step = 1),
uiOutput("plot_ui")
),
mainPanel(
ggvisOutput("plot"),
tableOutput("mtc_table")
)
))
服务器.R:
library(ggvis)
shinyServer(function(input, output, session) {
# A reactive subset of mtcars
mtc <- reactive({ mtcars[1:input$n, ] })
# A simple visualisation. In shiny apps, need to register observers
# and tell shiny where to put the controls
mtc %>%
ggvis(~wt, ~mpg) %>%
layer_points() %>%
bind_shiny("plot", "plot_ui")
output$mtc_table <- renderTable({
mtc()[, c("wt", "mpg")]
})
})
现在mtc
是响应式表达式,它实际上是一个函数(或者是一个函数?),它的结果是一个 data.frame。然而,它作为一个函数被传送到 ggvis。如果您尝试传递生成的 data.frame,例如
mtc() %>% ggvis(~wt, ~mpg) %>%
layer_points() %>%
bind_shiny("plot", "plot_ui")
Shiny 会开始抱怨“在没有主动反应上下文的情况下不允许操作”。那么究竟发生了什么?
我问的原因是我想返回我想在 ggvis 中使用的其他对象。更准确地说,我想更改 x 和 y 轴标签,其中标签在反应表达式内部计算,如下所示:
mtc <- reactive({ list(data=mtcars[1:input$n, ],
labx = "Computed x axis label",
laby = "Computed y axis label")
})
mtc %>% ggvis(data=data,~wt,~mpg) %>%
layer_points() %>%
add_axis("x",title=labx) %>%
add_axis("y",title=laby) %>%
bind_shiny("plot", "plot_ui")
是否有可能以某种方式利用mtc()
ggvis 调用中的输出结构?还是只能传递data.frame,然后把你的数据放到data.frame中?
还是有另一种注册 ggvis 对象的方法?在这个问题中,ggvis 输出是用observe_ggvis
函数注册的,但它似乎在当前的 ggvis 版本(0.3)中不存在。
我在 R 3.1.1 上使用 ggvis 版本 0.3.0.1 和闪亮的 0.10.0