我正在构建一个带有条形图的仪表板,该条形图显示某一技能或一组技能的平均分数。数据需要通过selectInput菜单中选择的几个特征进行过滤,如本例所示(http://shiny.rstudio.com/gallery/movie-explorer.html)。
由于菜单选项与变量的级别略有不同,我使用此问题的答案作为指南(Filtering from selectInput in R shiny)。使用下面的代码,我在标题中收到错误:" UseMethod中的错误:没有适用于' format_vec_csv'应用于类的对象"逻辑"。"
这是一个类问题,似乎是我为此错误找到的一个Google结果(https://github.com/rstudio/ggvis/issues/303)。我不确定如何修复它。
最终,我还希望能够提供与数据级别不同的选项。找到了这个讨论(Setting shiny selectInput from data.frame)但是还没有能够实现它。
虚假数据:
library(dplyr)
SurvDoer <- c(rep("self", 4), rep("coach", 4), rep("mentor", 4))
Competency <- c(rep("vision", 6), rep("goals", 6))
Score <- rep(c(2,3,4,5), 3)
fake<-data_frame(SurvDoer, Competency, Score)
代码:
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("choose_source")
),
mainPanel(
ggvisOutput("avg_bar")
)
)
)
server <- function(input, output, session) {
#Data
db <- reactive ({
fake <- fake %>%
group_by(Competency) %>%
summarise_(avg = interp(~ mean(x, na.rm=TRUE), x=as.name("Score")))
data.frame(fake)
})
#Render selectInput
output$choose_source <- renderUI({
sourceOpts <- as.vector(unique(db()$SurvDoer))
selectInput("source", "Survey Respondent", choices=sourceOpts, multiple=TRUE)
})
dataset <- reactive({
subset(db(), SurvDoer %in% input$source)
})
vis <- reactive({
dataset %>%
ggvis(~Competency, ~avg) %>%
layer_bars()
})
vis %>% bind_shiny("avg_bar")
}
shinyApp(ui, server)