簡體   English   中英

動態更新ggvis閃亮的用戶輸入?

[英]updating ggvis shiny user input dynamically?

我是編程,R,閃亮和ggvis的初學者,試圖根據用戶輸入包圍反應數據更新。 下面是一個閃亮的應用程序的可重現的示例,其中包含我正在嘗試構建的類型的時間過程圖。

應用程序應該運行,並應根據用戶輸入的更改進行更新。 但是,僅當使用“mapping”語法(=)在ggvis()調用中調用x,y和size變量時,繪圖才會更新。 我的直覺是使用“設置”語法(:=)或(〜)運算符將有助於解決以下問題:

問題是,當用戶輸入被更改時,而不是新的繪圖被發送到客戶端,我希望數據點動態更新 - 飛過繪圖到新的(x,y,大小)位置。

我還不熟悉ggvis如何將給定數據點(從數據幀的各列中取得的x,y和大小值)綁定到更新的數據點(該數據的同一行中的三個不同列)幀)。 目前ggvis中是否有功能允許我正在尋找的那種更新?

ui.R

library(shiny)
library(ggvis)

shinyUI(pageWithSidebar(

  headerPanel=headerPanel("Reactive Data Update Problem"), 

  sidebarPanel=sidebarPanel(
    selectInput("timePoint",
                "Choose Time Point:",
                list("time1" = 1,
                     "time2" = 2
                     )
                )
    ), 

  mainPanel=mainPanel(
    tabsetPanel(
      tabPanel('Plot',
               ggvis_output("myDotPlot")),
      tabPanel('Table',
               dataTableOutput("myDataTable"))
      )
    )
  )
)

server.R

library(shiny)
library(ggvis)

# Create sample dataset
time1x <- rexp(500, 2)
time1y <- rexp(500, 1)
time1s <- abs(log2(time1x/time1y))
time2x <- rexp(500, .02)
time2y <- rexp(500, .01)
time2s <- abs(log2(time2x/time2y))

myDataTable <- data.frame( "time1x" = time1x
                         , "time1y" = time1y
                         , "time1s" = time1s
                         , "time2x" = time2x
                         , "time2y" = time2y
                         , "time2s" = time2s
                         )

# Define paster functions allowing an input integer to represent a d.f column
xFormat <- function(timePoint) { paste("time", timePoint, "x", sep = "") }
yFormat <- function(timePoint) { paste("time", timePoint, "y", sep = "") }
sFormat <- function(timePoint) { paste("time", timePoint, "s", sep = "") }


# Define server logic necessary to produce plot
shinyServer(function(input, output, session){

  myDotPlot <- reactive({

    ggvis(myDataTable, props( x     = as.name(xFormat(input$timePoint))
                            , y     = as.name(yFormat(input$timePoint))
                            , size  = as.name(sFormat(input$timePoint))
                            )
         ) + mark_point()

  })

  output$myDataTable = renderDataTable({myDataTable})

  observe_ggvis(myDotPlot, 'myDotPlot', session)

})

我收到一個錯誤:找不到函數“ggvis_output”,ui.R的第20行應該是:

ggvisOutput("myDotPlot")),

observe_ggvis語句也有問題。 server.R的第40行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM