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.Rif-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_globalcondition_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)