ggvisに慣れてきて、shinyで使ってみようと思っています。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を使用しています