ошибка интеграции ggvis в блестящую

Я пытаюсь научиться заменять статические графики блестящими на графики ggvis. Со следующими файлами ui.R и server.R я могу получить отлично работающее блестящее приложение, когда мой вывод графика — base-R или ggplot. Я получаю следующую ошибку, когда пытаюсь использовать ggvis.

Error in handlers$add(handler, key, tail) : Key / already in use

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

Я попытался воспроизвести самый минимальный воспроизводимый пример. Следующее воспроизводит ошибку на моей машине. Я ввожу данные из файла csv, хранящегося в той же папке, что и ui.R и server.R. Я добавил dput() некоторых данных, которые можно использовать для воспроизведения файла csv.

Вот пример:

ui.R

library(shiny)
library(dplyr)
library(ggvis)


# Define UI
shinyUI(pageWithSidebar(


  # Application title
  headerPanel("Cricket"),

  sidebarPanel(

    selectInput("hteam", 
                label = "Home Team",
                choices = c("All Teams", "Australia", "England"), selected = "All teams"),

    br()

  ),


  mainPanel(
    plotOutput("CrickPlot")
  )

))

server.R

library(shiny)
library(dplyr)
library(ggvis)




shinyServer(function(input, output) {


  #### Input raw data
  df <- read.csv("mydf.csv", stringsAsFactors=F, header=T)

  df1 <- reactive({

    hometeam <-  input$hteam

  if(input$hteam != "All Teams"){  df <- df %>% filter(team==hometeam) }

  df %>% 
    group_by(player) %>% 
    summarize(totalruns=sum(runs,na.rm=T), totalinns=n() )

  })


####

output$CrickPlot <- renderPlot({


    tmp <- df1()

    tmp$id <- 1:nrow(tmp)

       all_values <- function(x) {
         if(is.null(x)) return(NULL)
         row <- tmp[tmp$id == x$id, ]
         paste("Name: ", tmp$player[x$id],
               "<br>Country: ",
               tmp$team[x$id],
               "<br>Total runs: ",
               tmp$totalruns[x$id])
       }  


    tmp %>% 
               ggvis(x = ~totalinns, 
                     y = ~totalruns, 
                     size := input_slider(10, 100),
                     size.hover := 200,
                     opacity := input_slider(0, 1),
                     key := ~id) %>%
         layer_points() %>%
         add_tooltip(all_values, "hover")



#  x <- df1()
#  plot(x$totalruns, x$totalinns)

})

}
)

Закодированный здесь ggvis немного проще, чем то, что я использую в действительности. Тем не менее, это все еще воспроизводит ошибку. Если я суммирую свою df и попытаюсь сделать диаграмму ggvis за пределами shining, этот код будет работать отлично. Кроме того, просто для наглядности, последние две строки, идущие после решеток, будут давать диаграмму рассеяния в base-R, если удалить весь материал ggvis. Поэтому я думаю, что это как-то связано с ggvis внутри блестящего приложения.

Вот данные mydf для этого примера:

dput(mydf)

structure(list(player = c("CB Fry", "CB Fry", "G Boycott", "G Boycott", 
                          "G Boycott", "G Boycott", "MJ Slater", "MJ Slater", "MJ Slater", 
                          "MJ Slater", "MJ Slater", "MJ Slater", "MJ Slater", "MJ Slater", 
                          "SK Warne", "SK Warne", "SK Warne", "SK Warne", "SK Warne", "SK Warne"
), team = c("England", "England", "England", "England", "England", 
            "England", "Australia", "Australia", "Australia", "Australia", 
            "Australia", "Australia", "Australia", "Australia", "Australia", 
            "Australia", "Australia", "Australia", "Australia", "Australia"
), runs = c(1L, 50L, 68L, 31L, 30L, 23L, 26L, 16L, 123L, 1L, 
            45L, 43L, 28L, 10L, 15L, 2L, 0L, 14L, 2L, NA)), row.names = c(NA, 
                                                                          -20L), .Names = c("player", "team", "runs"), class = "data.frame")

Заранее спасибо. Я попытался сделать это как можно минимальным, показывая при этом все возможные детали, относящиеся к ошибке.


person jalapic    schedule 12.12.2014    source источник


Ответы (1)


На сервере.R

  output$ggvisplot_ui <- renderUI({
    ggvisOutput("ggvisplot")
  })

  dl <- mtcars
  dl %>%
    ggvis(~mpg, ~wt) %>% 
    layer_points() %>% 
    bind_shiny("ggvisplot")

In ui.R

  mainPanel(
    htmlOutput("ggvisplot_ui")
  )
person Steven Beaupré    schedule 12.12.2014
comment
Недооцененный ответ. Я бы проголосовал 100 раз, если бы мог. Большое спасибо за это! - person sbanders; 23.03.2015