データはReactive Shiny式からGGVISプロットにどのように渡されますか?

StackOverflow https://stackoverflow.com//questions/25011544

  •  20-12-2019
  •  | 
  •  

質問

私はGGVISと知り合いになっています、そして私は光沢の中でそれを使うことを試みています。 GGVISがReactive 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")
  )
))
.

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に配管されています。結果のデータを渡しようとした場合。frame

mtc() %>%  ggvis(~wt, ~mpg) %>%
layer_points() %>%
        bind_shiny("plot", "plot_ui")
.

Shinyは、「アクティブなリアクティブコンテキストなしでは操作が許可されていない」という行に沿って不平を言っています。それで、実際に何が起こっているのか?

尋ねている理由は、GGVISで使用したい追加のオブジェクトを返したいのです。より正確には、ラベルが反応的表現内で内部に計算されているX軸ラベルを変更したい、このようなもの:

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")
.

GGVIS呼び出しの中でmtc()の構造の構造をどうかどうかにかかわらず、かかりますか?あるいは、Data.Frameを渡してからデータをデータに入れてデータを入力することは可能です。

またはGGVISオブジェクトを登録する別の方法はありますか?この ggvisの出力はobserve_ggvis関数に登録されていますが、現在のGGVISバージョン(0.3)には存在しないようです。

GGVIS版0.3.0.1を使用しており、R 3.1.1

で光沢0.10.0

役に立ちましたか?

解決

データセットの「Bare Reactives」に渡すことができます。このGGVISが変更されると自動的にデータが返信されますが、プロット全体を複製する必要はありません。

get_rct_df = reactive({  #code to change dataset from shiny input  )}
get_rct_df %>% ggvis() #rest of plotting code %>% bind_shiny("plot")
.

Get_RCT_DFのデータが変更されるたびに、プロット内のデータポイントを更新します(ただし、プロット全体を再描画されません)。これはまた、プロット全体を再描画せずに特定のことを更新できないことを意味します(プロットラベル、Layer_Model_Predictionsの方程式)。

他の提案をすることができ、プロット全体を反応性:

reactive({
   get_rct_df %>% 
      ggvis() #rest of plotting code %>% 
      add_axis("x", title = input$title)
}) %>% bind_shiny("plot")
.

これにより、プロットのタイトルやプロットの他の部分を更新することができます。しかし、データを複製するだけでなく、プロット全体を複製するようにGGVISを強制します。両方の方法をテストすると、方法1は「滑らかな」と見なされます。データが変更されたときにGGVISは移行アニメーションを構築しました。

他のヒント

OK私はこの答え

mtc <- reactive({ list(data=mtcars[1:input$n, ],
    labx = "Computed x axis label",
    laby = "Computed y axis label")
})

reactive({
    dl <- mtc()
    dl$data %>% ggvis(data=data,~wt,~mpg) %>% 
    layer_points() %>%
    add_axis("x",title=dl$labx) %>%
    add_axis("y",title=dl$laby) 
 }) %>% bind_shiny("plot", "plot_ui")
.

トリックは、反応の呼び出しが評価されるため、GGVISと実際のGGVISプロットのデータを計算するプロセスを分離できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top