首页 > 解决方案 > 在 R Shiny Server.R 函数中提取列表输入的值

问题描述

我有以下输入变量:

  1. no_of_structures
  2. no_of_legs_in_structure

我在 ui.R 函数中定义了输入变量 no_of_structures 然后在 server.R 函数中定义了变量 no_of_legs_in_structure。我试图通过下面的代码(output$test3)提取用户为每个“no_of_legs_in_structure”输入的“值”并且失败了。


ui <- fluidPage(
  sidebarLayout(
    
  
    
    sidebarPanel(
      
      
      #Enter Number of Structures to Analyse
      numericInput(inputId = "number_of_structures",
                   label = "enter number of structures",
                   value = 1,
                   min = 1,
                   max = Inf,
                   step=1),
      
  
      uiOutput("test2")
    

    ),# closing bracket for sidebarPanel
    
    
    mainPanel(
    
  textOutput("test1"), 
  uiOutput("test3")
  
  
    )#closing for mainPanel
    
    
    
  )#closing bracket for sidebarLayout
)#closing bracket for fluidPage




############ Below is code for server

server <- function(input, output){
  
#printing the number of structures entered by user

  
output$test1 <- renderText(paste0("number of structures entered by user are:- ", input$number_of_structures))
  
  
# Enter number of legs for each structure
  

  

 no_of_legs_in_structure <- reactive({
   lapply(1:input$number_of_structures, function(k){#start of function
    numericInput(inputId= "no_of_legs_in_structure",
                 label = paste0("no_of_legs_in_structure",k),
                 value=1,
                 min=0,
                 max=6,
                 step=1)
  })#end of lapply function and lapply

 })

  
  output$test2 <- renderUI(no_of_legs_in_structure())
  
 
  
  
  
  
  #Trying to extract number of legs in each structure
  
output$test3 <- 
  
 renderUI( 
    lapply(1:input$number_of_structures, function(k){
    (paste0("number of legs in Str::",k, "are",input$no_of_legs_in_structure[k], "\n" ))
  
  })


)
 
 
 
 
}# ending bracket for server function



shinyApp(ui=ui, server = server)

谁能帮我弄清楚我在为 test3 渲染输出的代码片段中做错了什么。我正在尝试提取用户在“no_of_legs_in_structure”字段中输入的值

标签: rlistinputshiny

解决方案


您生成no_of_legs_in_structureUI 元素的步骤是错误的。使用lapply,您已经创建了k所有具有相同 的输入id。我已添加k到 id 以便您可以区分输入。但是,我不喜欢使用 and 生成 UI 元素,lapplyrenderUI查看insertuIandremoveUI以获得更简洁的方法。

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    
    
    
    sidebarPanel(
      
      
      #Enter Number of Structures to Analyse
      numericInput(inputId = "number_of_structures",
                   label = "enter number of structures",
                   value = 1,
                   min = 1,
                   max = Inf,
                   step=1),
      
      
      uiOutput("test2")
      
      
    ),# closing bracket for sidebarPanel
    
    
    mainPanel(
      
      textOutput("test1"), 
      uiOutput("test3")
      
      
    )#closing for mainPanel
    
    
    
  )#closing bracket for sidebarLayout
)#closing bracket for fluidPage




############ Below is code for server

server <- function(input, output){
  
  #printing the number of structures entered by user
  
  
  output$test1 <- renderText(paste0("number of structures entered by user are:- ", input$number_of_structures))
  
  
  # Enter number of legs for each structure
  
  
  
  
  no_of_legs_in_structure <- reactive({
    lapply(1:input$number_of_structures, function(k){#start of function
      numericInput(inputId= paste0("no_of_legs_in_structure_", k),
                   label = paste0("no_of_legs_in_structure",k),
                   value=1,
                   min=0,
                   max=6,
                   step=1)
    })#end of lapply function and lapply
    
  })
  
  
  output$test2 <- renderUI(no_of_legs_in_structure())
  
  
  
  
  
  
  #Trying to extract number of legs in each structure
  
  output$test3 <- 
    
    renderUI( 
      lapply(1:input$number_of_structures, function(k){
        (paste0("number of legs in Str::",k, "are",input[[paste0("no_of_legs_in_structure_", k)]], "\n" ))
        
      })
      
      
    )
  
  
  
  
}# ending bracket for server function



shinyApp(ui=ui, server = server)

推荐阅读