【问题标题】:Create an else if statement that automatically accounts for new entries创建一个自动计算新条目的 else if 语句
【发布时间】:2022-11-29 22:07:43
【问题描述】:

我创建了一个闪亮的应用程序,其中包括在地图上显示不同年份的数据。可以选择感兴趣的年份。为此,我使用了以下代码:

server <- function(input, output, session) {
  datasetInput <- reactive({
    if (input$myear_selected == 2017){
      MY17}
    else if (input$myear_selected == 2018){
      MY18}
    else if (input$myear_selected == 2019){
      MY19}
    else if (input$myear_selected == 2020){
      MY20}
    else if (input$myear_selected == 2021){
      MY21}
    else if (input$myear_selected == 2022){
      MY22}
    })

但是,以后可能会添加未来年份的数据框。因此,我希望自动考虑这些年份。到目前为止,我尝试创建一个包含正确年份的数据框,然后创建一个循环。它看起来像那样,但它不起作用。

reac_matrix <- data.frame(matrix(ncol = 2,nrow = length(data_files)))

for (i in 1:length(data_files)) {
    reac_matrix[i,1] <- as.numeric(paste("20", i + 16, sep = ""))
    reac_matrix[i,2] <- paste("MY", i + 16, sep = "")
}

server <- function(input, output, session) {
  datasetInput <- reactive({
    for (i in 1:nrow(reac_matrix)) {
      if (input$myear_selected == reac_matrix[i,1]){
        get(reac_matrix[i,2])}
    }
  })

非常感谢您的宝贵帮助!

【问题讨论】:

    标签: r loops shiny


    【解决方案1】:

    我会使用一个命名列表来解决这个问题

    dta_list <- #some code to generate a named list where each entry is named after the year it's representing
    

    并通过服务器代码像这样访问它

    server <- function(input, output, session) {
      datasetInput <- reactive({
        dta_list[[input$myear_selected]]
      })
    

    希望这可以帮助!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      相关资源
      最近更新 更多