динамически обновлять пользовательский ввод ggvis?

Я новичок в программировании, R, shiny и ggvis, пытаюсь осмыслить реактивное обновление данных на основе ввода данных пользователем. Ниже приведен воспроизводимый пример блестящего приложения, содержащего график динамики изменений того типа, который я пытаюсь построить.

Приложение должно запускаться и обновляться при изменении пользовательского ввода. Однако график обновляется только тогда, когда переменные x, y и size вызываются в вызове ggvis () с использованием синтаксиса «сопоставления» (=). Моя интуиция подсказывает, что использование синтаксиса "настройки" (: =) или оператора (~) поможет решить следующую проблему:

Проблема в том, что вместо того, чтобы генерировать новый график при изменении пользовательского ввода и этот новый график отправляется клиенту, я хотел бы, чтобы точки данных обновлялись динамически - пролетали по графику до их новых (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)

})

person user3596608    schedule 02.05.2014    source источник


Ответы (1)


Я получаю сообщение об ошибке: не удалось найти функцию "ggvis_output", строка 20 ui.R должна быть:

ggvisOutput("myDotPlot")),

Также что-то не так с оператором наблюдения_ggvis. Строка 40 server.R

person Christiaan    schedule 29.10.2014