在Shiny/R中,当我单击图像链接(actionLink)时,应用程序崩溃

ovfsdjhp  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(99)

我有这个应用程序在这里:
下面是该模块的代码:

library(shiny)
library(shinyWidgets)
library(tidyverse)

years <- 2015:2022

list_actions <- list(
  letters[1:3],
  letters[4:6],
  letters[7:9],
  letters[10:12],
  letters[13:15],
  letters[16:18],
  letters[19:21],
  letters[22:24]
)

list_actions <- list_actions %>% set_names(years)

module_UI <- function(id) {
  ns <- NS(id)
  tagList(

    uiOutput(ns('letter_1'))

  )
}

module_server <- function(id, app_control_input) {
  moduleServer(
    id,
    function(input, output, session) {

      output$letter_1 <- renderUI({
        h1(app_control_input())
      })

    }
  )
}

这是应用程序的主代码:

ui <- fluidPage(
  radioGroupButtons(
    inputId = 'seasons',
    direction = 'horizontal',
    justified = 'TRUE',
    size = 'sm',
    label = '',

    choices = sort(years,decreasing = TRUE),
    selected = '2022'
  ),

  htmlOutput('actions_icons'),

  module_UI('overview')
)

server <- function(input, output, session) {

  output$actions_icons <- renderUI({

    list_actions[[input$seasons]]  %>%
      map(~ actionLink(label = .x,
        inputId = paste0(.x)))

        })

  letter <- reactive({list_actions[[input$seasons]][1]})

  letters %>% map( ~ observeEvent(input[[paste0(.x)]], {
    letter(.x)
  }))

  module_server('overview', app_control_input = letter)

}

shinyApp(ui, server)

多年来,当我点击时,显示给我的字母是正确的。因此,如果我点击2015,显示的字母是a b c
我的问题是:当我点击字母时,应用程序崩溃。
例如,当我运行应用程序时,2022已被选中。因此,显示字母v w x,字母w已被选中。但当我单击x时,应用程序崩溃

    • 我如何避免这种情况**

此外,非常重要的是,每次我选择(点击)年份,第一个字母被选择/显示在下面,然后我将能够选择其他字母以及。
有人帮忙吗?

rnmwe5a2

rnmwe5a21#

也许你在找这个

server <- function(input, output, session) {
  my <- reactiveValues()
  output$actions_icons <- renderUI({
    
    list_actions[[input$seasons]]  %>%
      map(~ actionLink(label = .x,
                       inputId = paste0(.x)))
    
  })
  
  observe({
    my$letter <- list_actions[[input$seasons]][1]
  })
  
  observeEvent(input$seasons, {
    my_list <- list_actions[[input$seasons]]
    n <- length(list_actions[[input$seasons]])
    lapply(1:n, function(i){
      observeEvent(input[[my_list[i]]], {
        my$letter <- list_actions[[input$seasons]][i]
        print(my$letter)
      })
    })
  })
  
  module_server('overview', app_control_input = reactive(my$letter))
  
}

相关问题