我的数据集示例如下:
print(data)
Team v1 v2 v3 v4 v5
A England Gold Red 50
B England Silver Blue 30 40
C Wales Blue 40 30
D USA Silver Red 50 20
我正在尝试制作一个闪亮的 R 仪表板,以允许用户根据某些特征比较团队。v1、v2 和 v3 是我有兴趣查看的特征,v4 和 v5 包含我要比较的数据。例如,我希望能够(在条形图中)显示 v2 = 银牌的所有团队的 v4 值。
我目前的尝试如下:
用户界面
# Shiny App
ui <- fluidPage(
fluidRow(
column(6, offset=3,
selectInput(inputId = "variables",
label = "Variable",
choices = colnames(data[,c(5:6)])))),
fluidRow(
column(2,
selectInput(inputId = "filter",
label = "Filter",
choices = colnames(data[,c(2:4)]),
selected = 'v2')),
column(2,
uiOutput("ui"))
),
plotOutput("all")
)
和 server.r
server <- function(input,output){
output$ui <- renderUI ({
switch(input$filter,
"v1" = selectInput(
"v1", "More filters", data$v1, selected = "England"),
"v2" = selectInput(
"v2", "More filters", data$v2, selected = "Gold"),
"v3" = selectInput(
"v3", "More filters", data$v3, selected = "Red")
)
})
plott <- reactive({input$ui})
varr <- reactive({input$filter})
datasubset <- reactive({subset(data, varr()==plott())})
finalsubset <- reactive({
datasubset()[,input$variables]
})
output$all <- renderPlot({barplot(finalsubset())
})
我发现根据为 input$filter 选择的选项创建第二个过滤器的唯一方法是使用 renderUI 和 uiOutput。但是,我找不到基于这两个反应输入生成条形图的方法。
我用来获取要绘制的数据子集的当前代码是:
plott <- reactive({input$ui})
varr <- reactive({input$filter})
datasubset <- reactive({subset(data, varr()==plott())})
但是,我在闪亮的应用程序中收到错误“需要有限的 xlim 值”。
如果我分别将 varr() 和 plott() 替换为 v2 和 Gold(例如),数据绘制得很好,但这些对输入没有反应。
我在这里做错了什么?