在下面的代码中,我试图创建一个输入来显示我的所有市场,或者仅仅是绘图和数据表中的选择。我通过渲染函数中的ifelse语句执行此操作或尝试,但是我收到错误,并且绘图或数据表都不会呈现。它们在没有if else语句的情况下进行渲染。我已经包含了一个示例数据集,希望有助于放在上下文中。
ui <- dashboardPage(
dashboardHeader(title = "Example"),
dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", tabName = "Dashboard"),
menuItem("Example", tabName = "example"))),
dashboardBody(
tabItems(
tabItem(tabName = "Dashboard",
fluidRow(
valueBoxOutput("example"))),
tabItem(tabName = "example",
fluidRow(
box(title = "Example",
plotOutput("plotexample"), width = 12),
box(title = "Data Selection",
selectInput("market","Market(s): ", c(unique(data$marketnum),"All"),multiple = T, selectize = T, selected = "All"))),
fluidRow(
box(DT::dataTableOutput("markettable"), width = 12))))))
server <- function(input,output) {
ExampleAllMarkets <- reactive({
ExampleData %>%
group_by(Event,marketnum) %>%
summarise(ItemCount = n_distinct(ItemNumber))
})
Example <- reactive({
ExampleData %>%
filter(marketnum == input$market) %>%
group_by(Event,marketnum) %>%
summarise(PolicyCount = n_distinct(Policy_Number_9_Digit))
})
output$example <- renderValueBox({
valueBox(
paste0("44", "%"), "example", icon = icon("car"),
color = "red"
)
})
我在我的渲染块中放置ifelse语句对是否&#34; All&#34;被选中。
output$plotexample <- renderPlot({
ifelse(input$market=="All",
ggplot(Example(), aes(x=MBC_Number, y=ItemCount)) +
geom_bar(stat="identity"),
ggplot(ExampleAllMarkets(), aes(x=marketnum, y=ItemCount))
+
geom_bar(stat="identity"))
})
output$markettable <- DT::renderDataTable({
ifelse(input$market == "All",
ExampleAllMarkets(),
Example())
})
}
shinyApp(ui,server)
csv格式的示例数据
marketnum,ItemNumber 2118 7,101 1109 2,109 10101 4,102 8100 12,103 5106 13,116 5112 10103 7,113 9114 10112 6114 2116 11113 3,107 13102 8,107 10,109 12110 1120 4106 8116 2,112 2,106 11,101 6108 11,107 10111 6120 10,118 11119 13117
答案 0 :(得分:0)
在这种情况下,您可能无法使用ifelse
。
分析ifelse
的源代码,因为绘图对象不是那么简单,它不只是返回绘图本身,而是
rep(plot, length.out = 1)
或等效plot[1]
,它只是图的数据集。绘图对象的长度> 1,对于那些,ifelse
仅返回其第一个元素。
这可以通过评估
轻松确认> ifelse(T, c(1, 2), c(3, 4))
[1] 1
因此渲染函数无法绘制任何东西,因为它的输入只是这个数据集。
您只需使用常规if else。