gpt4 book ai didi

r - 应用于 2 个输出的 Shiny 过滤器

转载 作者:行者123 更新时间:2023-12-04 10:08:16 25 4
gpt4 key购买 nike

我正在尝试使用 2 个可视化(数据表和条形图)创建一个 Shiny 的仪表板,这将允许用户同时将相同的过滤器应用于两个可视化。我尝试使用显示的解决方案 here但我想我错过了一些东西。 “Data5”是我用来填充的数据框的名称。任何帮助,将不胜感激。

服务器.R

library(shiny)
library(ggplot2)
library(dplyr)

dt <- data5

shinyServer(function(input, output) {


data <- reactive({data5
if (input$year != "All"){
data <- data[data5$year == input$year,]
}
if (input$month != "All"){
data <- data[data5$month == input$month,]
}
if (input$partner_name != "All"){
data <- data[data5$partner_name == input$partner_name,]
}
if (input$cube_title != "All"){
data <- data[data5$cube_title == input$cube_title,]
}

})

#plots
output$table1 <- renderDataTable({
data
})

output$plot1 <- renderPlot({
ggplot(data=subset(data5,cube_title=="Leads"), aes(x=month,y=f0_)) + geom_bar(fill="blue", stat = "identity") + ylab("Leads") + ggtitle("Leads")
})
output$plot2 <- renderPlot({
ggplot(data=subset(data5,cube_title==c("CommunityProfileViews","HomeProfileViews")), aes(x=month,y=f0_)) + geom_bar(fill="blue", stat = "identity") + ylab("Profile Views") + ggtitle("Profile Views")

})

})

ui.R
dashboardPage(
skin = "blue",
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(
(
selectInput("year",
"Year:",
c("All",
unique(as.character(data5$year))))
),
(
selectInput("month",
"Month:",
c("All",
unique(as.character(data5$month))))
),
(
selectInput("partner_name",
"Partner:",
c("All",
unique(as.character(data5$partner_name))))
),
(
selectInput("cube_title",
"Metric:",
c("All",
unique(as.character(data5$cube_title))))
)
),

dashboardBody(


tabsetPanel(id = "tabSelected",
tabPanel("Charts", plotOutput("plot1"),
box(plotOutput("plot2"))),
tabPanel("DataTable", dataTableOutput("table1"))
)

)
)

最佳答案

问题 1:响应式(Reactive)返回一个函数,而不是一个对象。所以我们需要调用data() ,而不是 data , 在您的 renderDataTablerenderPlot职能

问题 2:你需要把 data()在您的渲染功能中。目前,它正在调用data5 ,这不是 react 性的:

output$plot1 <- renderPlot({
Temp <- data()
ggplot(data=subset(Temp,cube_title=="Leads"), aes(x=month,y=f0_)) + geom_bar(fill="blue", stat = "identity") + ylab("Leads") + ggtitle("Leads")
})

问题 3:您的 react 函数返回一个赋值调用。我会这样做更像:
data <- reactive({ #The data5 that was here is not necessary
temp <- data5
if (input$year != "All"){
temp <- temp[temp$year == input$year,]
}
if (input$month != "All"){
temp <- temp[temp$month == input$month,]
}
if (input$partner_name != "All"){
temp <- temp[temp$partner_name == input$partner_name,]
}
if (input$cube_title != "All"){
temp <- temp[temp$cube_title == input$cube_title,]
}
return(temp)

})

所以现在当我们调用 data() ,我们返回过滤后的 data.frame
第4期 :(虽然问题不大)我会避免使用 data作为对象名称。它意味着其他东西,并且在阅读代码时经常会让人感到困惑。使用更安全的 DT或者是其他东西。您可以随时通过键入 exists("NameToCheck") 来检查名称是否正在使用中。在控制台中。

Suggested Reading

关于r - 应用于 2 个输出的 Shiny 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com