3
我是一個初學編程,R,閃亮和ggvis,試圖圍繞基於用戶輸入的無功數據更新包裹我的頭。下面是一個閃亮的應用程序包含我正在嘗試構建的類型的時間過程圖的可重複的示例。動態更新ggvis閃亮用戶輸入?
該應用程序應運行,並應更新用戶輸入的更改。但是,只有使用「映射」語法(=)在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)
})