Я пытаюсь научиться заменять статические графики блестящими на графики 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")
Заранее спасибо. Я попытался сделать это как можно минимальным, показывая при этом все возможные детали, относящиеся к ошибке.