0

闪亮的初学者在这里!我正在尝试创建一个应用程序,用户可以在其中输入动态数量的 8 位代码。首先他们输入他们喜欢的代码数量,然后使用renderUI,生成了很多槽。

我想使用 ShinyFeedback 检查每个插入代码的 nchar,如果它不是 8 位数字,则显示警告。这就是我迄今为止所做的:

  code_check <- reactive({

    lapply(1:input$numInputs, function(i) {

      shinyFeedback::feedbackWarning(input$inputName,
                                     nchar(input$inputName) != 8,
                                     "Your code needs to be 8 digits!")
    }

    )
  })

我无法通过他们的 id 访问各个输入。input$inputName 在 renderUI 部分生成:

  observeEvent(input$numInputs, {
    
    output$inputGroup = renderUI({
      
      input_list <- lapply(1:input$numInputs, function(i) {
        
        # for each dynamically generated input, give a different name
        inputName <- paste("Code ", i, sep = " ")
        
        # generate the input field, the inputID = label, initial value is 12345678
        textInput(inputName, inputName, "12345678")
        
      })
      
      })
    
    })

运行此代码会出现以下错误:Warning: Error in feedback: is.character(inputId) is not TRUE

在下面完成当前代码:

library(shiny)

ui <- shinyUI(fluidPage(
  
  shinyFeedback::useShinyFeedback(),
  
  titlePanel("As many 8 digit codes as you like"),
  
  sidebarLayout(
    sidebarPanel(
      numericInput("numInputs", "How many codes would you like to insert?", 4),
      # place to hold dynamic inputs
      uiOutput("inputGroup")
    ),

    mainPanel(textOutput("inputValues"),
              textOutput("final"),
              textOutput("code_check")
              
    )
    
  )
))

server <- shinyServer(function(input, output) {
  
  # observe changes in "numInputs", and create corresponding number of inputs

  observeEvent(input$numInputs, {
    
    output$inputGroup = renderUI({
      
      input_list <- lapply(1:input$numInputs, function(i) {
        
        # for each dynamically generated input, give a different name
        inputName <- paste("Code ", i, sep = " ")
        
        # generate the input field, the inputID = label, initial value is 12345678
        textInput(inputName, inputName, "12345678")
        
      })
      
      })
    
    })

  code_check <- reactive({

    lapply(1:input$numInputs, function(i) {

      shinyFeedback::feedbackWarning(input$inputName,
                                     nchar(input$inputName) != 8,
                                     "Your code needs to be 8 digits!")
    }

    )
  })
  
  output$code_check <- renderPrint({code_check()})
  
  test <- reactive({
    paste(lapply(1:input$numInputs, function(i) {
      
      inputName <- paste("Code ", i, sep = " ")
      input[[inputName]]
    }))
  })

output$final <- renderPrint({test()})
  
  observe({
    assign(
      x = "inserted_codes",
      value =  test(),
      envir = .GlobalEnv
    )
  })
  
})

shinyApp(ui, server)

将不胜感激任何想法:)

4

0 回答 0