r 中的嵌套循环
Nested loop if in r
我是 r 的新手,我正在学习构建 shiny 的基本应用程序,我的文件 server.R
中的 if else
条件有问题。我尝试设置 if else
条件,但没有成功。
这是我的 ui.R
:
bootstrapPage(
tags$head(includeHTML("gtag.html")),
navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
"VISUALISATION LE COVID-19", id="nav",
tabPanel("GLOBAL",
sidebarPanel(
width= 20,
span(tags$i(h1("Visualiser la revolution globale du Covid-19\n")), style="color:#045a8d"),
span(tags$i(h2("Diagramme en barre")), style="color:#045a8d"),
selectInput("condition","Choisir observation:",
choices = c("Cas","Décès","Nouveaux Cas","Nouveaux Décès"))
),
plotOutput("image")
),
tabPanel("Continent",
sidebarLayout(
sidebarPanel(
span(tags$i(h4("Visualiser la revolution du Covid-19 par continent\n")), style="color:#045a8d"),
selectInput("continent","Choisir un continent:",
choices = c("Afrique","Asie","Europe","Amérique du Nord","Océanie","Amérique du Sud")),
selectInput("condition","Choisir observation:",
choices = c("Cas","Nouveaux Cas","Décès","Nouveaux Décès"))
),
mainPanel(
tabsetPanel(
tabPanel("Diagramme en barre pour chaque continent", plotOutput("barre")),
tabPanel("Diagramme sectoriel", plotOutput("sectoriel"), width=15),
tabPanel("Dendrogramme", plotOutput("dendrogramme")),
tabPanel("Plan Factoriel",plotOutput("planfactoriel"))
)
)
)
)
)
)
这是我对 server.R
的 if-else
声明:
output$barre <- renderPlot({
if (input$continent == "Afrique"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Africa") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Africa") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Asie"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Asia") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Asia") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Europe"){
if (input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Europe") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Europe") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Amérique du Nord"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Océanie"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Oceania") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Oceania") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Amérique du Sud"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
}
我被卡住了,因为我不知道要设置什么条件。
如有任何帮助,我们将不胜感激!!谢谢!!
也许您想 "dry" 稍微改进一下代码,因为您的多个图看起来非常相似。
也许您需要一个 case_when
语句来 convert/translate selectInput
选择(例如,从 "Afrique" 到 "Africa")。我提供了几个例子。
那么您可能只需要几个 if
病例与死亡的陈述,以及 select 填充颜色。
编辑:在查看 ui
后,您有 2 个 selectInput
具有相同的 ID(它们应该是唯一的)。我将它们重命名为 condition_global
和 condition_continent
。我还修改了变量名称以匹配您的 ui
.
library(shiny)
library(tidyverse)
library(ggplot2)
library(lubridate)
library(shinythemes)
ui <- bootstrapPage(
#tags$head(includeHTML("gtag.html")),
navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
"VISUALISATION LE COVID-19", id="nav",
tabPanel("GLOBAL",
sidebarPanel(
width= 20,
span(tags$i(h1("Visualiser la revolution globale du Covid-19\n")), style="color:#045a8d"),
span(tags$i(h2("Diagramme en barre")), style="color:#045a8d"),
selectInput("condition_global","Choisir observation:",
choices = c("Cas","Décès","Nouveaux Cas","Nouveaux Décès"))
),
plotOutput("image")
),
tabPanel("Continent",
sidebarLayout(
sidebarPanel(
span(tags$i(h4("Visualiser la revolution du Covid-19 par continent\n")), style="color:#045a8d"),
selectInput("continent","Choisir un continent:",
choices = c("Afrique","Asie","Europe","Amérique du Nord","Océanie","Amérique du Sud")),
selectInput("condition_continent","Choisir observation:",
choices = c("Cas","Nouveaux Cas","Décès","Nouveaux Décès"))
),
mainPanel(
tabsetPanel(
tabPanel("Diagramme en barre pour chaque continent", plotOutput("barre")),
tabPanel("Diagramme sectoriel", plotOutput("sectoriel"), width=15),
tabPanel("Dendrogramme", plotOutput("dendrogramme")),
tabPanel("Plan Factoriel",plotOutput("planfactoriel"))
)
)
)
)
)
)
server <- function(input, output, session) {
output$barre <- renderPlot({
sel_continent <- case_when(
input$continent == "Afrique" ~ "Africa",
input$continent == "Asie" ~ "Asia",
input$continent == "Europe" ~ "Europe",
input$continent == "Amérique du Nord" ~ "North America",
input$continent == "Océanie" ~ "Oceania",
input$continent == "Amérique du Sud" ~ "South America"
)
if (input$condition_continent == "Cas") {
sel_condition <- "cases"
fill_color <- "yellow"
}
if (input$condition_continent == "Décès") {
sel_condition <- "deaths"
fill_color <- "red"
}
cv_continent %>%
mutate(date = ymd(date)) %>%
filter(continent_level == sel_continent) %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(!!sym(sel_condition)))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = paste(input$condition_continent, "chaque jour", x="Mois", y=input$condition_continent)) +
geom_col(fill = fill_color)
})
}
shinyApp(ui, server)
我是 r 的新手,我正在学习构建 shiny 的基本应用程序,我的文件 server.R
中的 if else
条件有问题。我尝试设置 if else
条件,但没有成功。
这是我的 ui.R
:
bootstrapPage(
tags$head(includeHTML("gtag.html")),
navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
"VISUALISATION LE COVID-19", id="nav",
tabPanel("GLOBAL",
sidebarPanel(
width= 20,
span(tags$i(h1("Visualiser la revolution globale du Covid-19\n")), style="color:#045a8d"),
span(tags$i(h2("Diagramme en barre")), style="color:#045a8d"),
selectInput("condition","Choisir observation:",
choices = c("Cas","Décès","Nouveaux Cas","Nouveaux Décès"))
),
plotOutput("image")
),
tabPanel("Continent",
sidebarLayout(
sidebarPanel(
span(tags$i(h4("Visualiser la revolution du Covid-19 par continent\n")), style="color:#045a8d"),
selectInput("continent","Choisir un continent:",
choices = c("Afrique","Asie","Europe","Amérique du Nord","Océanie","Amérique du Sud")),
selectInput("condition","Choisir observation:",
choices = c("Cas","Nouveaux Cas","Décès","Nouveaux Décès"))
),
mainPanel(
tabsetPanel(
tabPanel("Diagramme en barre pour chaque continent", plotOutput("barre")),
tabPanel("Diagramme sectoriel", plotOutput("sectoriel"), width=15),
tabPanel("Dendrogramme", plotOutput("dendrogramme")),
tabPanel("Plan Factoriel",plotOutput("planfactoriel"))
)
)
)
)
)
)
这是我对 server.R
的 if-else
声明:
output$barre <- renderPlot({
if (input$continent == "Afrique"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Africa") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Africa") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Asie"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Asia") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Asia") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Europe"){
if (input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Europe") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Europe") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Amérique du Nord"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Océanie"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Oceania") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "Oceania") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
else if(input$continent == "Amérique du Sud"){
if(input$condition == "Cas"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(cases))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Cas chaque jour",x="Mois",y="Cas confirmés")+
geom_col(fill = "yellow")
}
else if(input$condition == "Décès"){
cv_continent %>% mutate(date = ymd(date)) %>%
filter(continent_level %in% "North America") %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(deaths))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = "Décès chaque jour",x="Mois",y="Décès")+
geom_col(fill = "red")
}
}
}
我被卡住了,因为我不知道要设置什么条件。
如有任何帮助,我们将不胜感激!!谢谢!!
也许您想 "dry" 稍微改进一下代码,因为您的多个图看起来非常相似。
也许您需要一个 case_when
语句来 convert/translate selectInput
选择(例如,从 "Afrique" 到 "Africa")。我提供了几个例子。
那么您可能只需要几个 if
病例与死亡的陈述,以及 select 填充颜色。
编辑:在查看 ui
后,您有 2 个 selectInput
具有相同的 ID(它们应该是唯一的)。我将它们重命名为 condition_global
和 condition_continent
。我还修改了变量名称以匹配您的 ui
.
library(shiny)
library(tidyverse)
library(ggplot2)
library(lubridate)
library(shinythemes)
ui <- bootstrapPage(
#tags$head(includeHTML("gtag.html")),
navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
"VISUALISATION LE COVID-19", id="nav",
tabPanel("GLOBAL",
sidebarPanel(
width= 20,
span(tags$i(h1("Visualiser la revolution globale du Covid-19\n")), style="color:#045a8d"),
span(tags$i(h2("Diagramme en barre")), style="color:#045a8d"),
selectInput("condition_global","Choisir observation:",
choices = c("Cas","Décès","Nouveaux Cas","Nouveaux Décès"))
),
plotOutput("image")
),
tabPanel("Continent",
sidebarLayout(
sidebarPanel(
span(tags$i(h4("Visualiser la revolution du Covid-19 par continent\n")), style="color:#045a8d"),
selectInput("continent","Choisir un continent:",
choices = c("Afrique","Asie","Europe","Amérique du Nord","Océanie","Amérique du Sud")),
selectInput("condition_continent","Choisir observation:",
choices = c("Cas","Nouveaux Cas","Décès","Nouveaux Décès"))
),
mainPanel(
tabsetPanel(
tabPanel("Diagramme en barre pour chaque continent", plotOutput("barre")),
tabPanel("Diagramme sectoriel", plotOutput("sectoriel"), width=15),
tabPanel("Dendrogramme", plotOutput("dendrogramme")),
tabPanel("Plan Factoriel",plotOutput("planfactoriel"))
)
)
)
)
)
)
server <- function(input, output, session) {
output$barre <- renderPlot({
sel_continent <- case_when(
input$continent == "Afrique" ~ "Africa",
input$continent == "Asie" ~ "Asia",
input$continent == "Europe" ~ "Europe",
input$continent == "Amérique du Nord" ~ "North America",
input$continent == "Océanie" ~ "Oceania",
input$continent == "Amérique du Sud" ~ "South America"
)
if (input$condition_continent == "Cas") {
sel_condition <- "cases"
fill_color <- "yellow"
}
if (input$condition_continent == "Décès") {
sel_condition <- "deaths"
fill_color <- "red"
}
cv_continent %>%
mutate(date = ymd(date)) %>%
filter(continent_level == sel_continent) %>%
arrange(date) %>%
transmute(date, Diff = c(0, diff(!!sym(sel_condition)))) %>%
ggplot(aes(x = date, y = Diff)) +
labs(title = paste(input$condition_continent, "chaque jour", x="Mois", y=input$condition_continent)) +
geom_col(fill = fill_color)
})
}
shinyApp(ui, server)