【问题标题】:Nested loop if in r如果在 r 中嵌套循环
【发布时间】:2020-05-13 14:47:11
【问题描述】:

我是 r 的新手,我正在学习构建闪亮的基本应用程序,我的文件 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"))
                        )
                      )

                    )     
             )


  )

) 

这是我的if-elseserver.R 声明:

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") 
  }
}
}

我被卡住了,因为我不知道要设置什么条件。

对此的任何帮助将不胜感激!谢谢!!

【问题讨论】:

    标签: r if-statement nested-loops


    【解决方案1】:

    也许您想稍微“干”一下您的代码,因为您的多个绘图看起来非常相似。

    也许您需要一个 case_when 语句来转换/翻译 selectInput 选项(例如,从“Afrique”到“Africa”)。我提供了几个例子。

    那么您可能只需要几条if 声明来说明病例与死亡情况,并选择填充颜色。

    编辑:在查看 ui 后,您有 2 个具有相同 ID 的 selectInput(它们应该是唯一的)。我将它们重命名为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)
    

    【讨论】:

    • 我可能会对您的回答感到困惑,您能否查看我的ui.Rserver.R 以获得if-else 声明,谢谢。我更新了它
    • 如果您需要 css、html 和 csv 文件:gitlab.com/Schrodinger168/practice/-/tree/master
    • 好的,我现在检查一下
    • 那将字符串“cases”转换为同名(cases)的符号,所以会被理解为cv_continent内的列名,而不是字符串。跨度>
    • 这是 2 个功能。 sym 是一项功能。 bang-bang !! 是取消引用的语法糖。见参考:dplyr.tidyverse.org/articles/programming.html#unquoting
    猜你喜欢
    • 2017-04-16
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2017-04-30
    • 2021-11-15
    相关资源
    最近更新 更多