Я знакомлюсь с ggvis, и я стараюсь использовать его блестящим. У меня возникли проблемы с пониманием того, как ggvis получает данные из реактивного Блестящего выражения. Вот основное приложение из репозитория 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")
)
))
server.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")
Блестящий начал жаловаться по строкам, что "Операция не разрешена без активного реактивного контекста". Итак, что же происходит?
Причина, по которой я спрашиваю, это то, что я хотел бы вернуть дополнительные объекты, которые я хочу использовать в 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? В этом question выход ggvis зарегистрирован функцией observe_ggvis
, но, похоже, его нет в текущей версии ggvis (0.3).
Я использую ggvis версии 0.3.0.1 и блестящий 0.10.0 на R 3.1.1