Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何使多个元素在添加/删除按钮上下文中具有反应性?_R_Shiny_Shiny Server - Fatal编程技术网

R:如何使多个元素在添加/删除按钮上下文中具有反应性?

R:如何使多个元素在添加/删除按钮上下文中具有反应性?,r,shiny,shiny-server,R,Shiny,Shiny Server,我正在创建一个闪亮的应用程序,当我点击“添加”或“删除”按钮时,多个反应元素都会受到影响。我已经大大简化了我下面要做的事情。基本上,我们将同时获得selectInput()和textInput()框,这样textInput()框将填充用户选择的selectInput()框的结果。然后我有一个add按钮和remove按钮,通过单击add按钮,在下一行,我们可以看到新的selectInput()和textInput()框并排出现。如上所述,新行的textInput()框显示用户选择的新行的selec

我正在创建一个闪亮的应用程序,当我点击“添加”或“删除”按钮时,多个反应元素都会受到影响。我已经大大简化了我下面要做的事情。基本上,我们将同时获得selectInput()和textInput()框,这样textInput()框将填充用户选择的selectInput()框的结果。然后我有一个add按钮和remove按钮,通过单击add按钮,在下一行,我们可以看到新的selectInput()和textInput()框并排出现。如上所述,新行的textInput()框显示用户选择的新行的selectInput()框的结果

我遇到的问题是能否引用new seletInput()框的新值。使用get()引用不起作用,我需要一种迭代方法,以便在添加和删除新框时能够引用这些值。如何成功调用对连续selectInput()框结果的引用

suppressWarnings(库(闪亮))
抑制警告(库(shinyFiles))

ui我不确定这是否是您想要的,但是下面的方法通过两个buttron添加/删除输入对。首先,我为选择二人组创建了一个

thisList <- as.list(c(1, 2, 3, 4, 5), c(1, 2, 3, 4, 5)) 

suppressWarnings(library(shiny))

selectorUI <- function(id){
  ns = NS(id)

  tags$div(
    fluidRow(
      column(6, uiOutput(ns('first'))),
      column(6, uiOutput(ns('second')))
    ),
    id = paste0('param', id)
  )
}

selectorServer <- function(input, output, session){
  ns = session$ns

  output$first <- renderUI({
    selectInput(
      ns('first'),
      ns("First UI"),
      choices = thisList, selected = 1)
  })

  output$second <- renderUI({
    textInput(
      ns('second'),
      ns("Second UI"),
      value = input$first)
  })
}
服务器端在启动时为
id=0
和每当添加新行时为
id=params$button
呈现模块

server <- function(input, output, session) {
  callModule(selectorServer, 0)

  params <- reactiveValues(btn = 0)

  output$view <- renderPrint({ 
    print(input[[NS(params$btn, "first")]])
    print(input[[NS(params$btn, "second")]])
  })

  observeEvent(input$insertParamBtn, {
    params$btn <- params$btn + 1
    callModule(selectorServer, params$btn)
    insertUI(
      selector = '#placeholder',
      ui = selectorUI(params$btn)
    )
  })

  observeEvent(input$removeParamBtn, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#param', params$btn)
    )
    params$btn <- params$btn - 1
  })      
}
shinyApp(ui = ui, server = server)

server您的代码中似乎有问题。对象
thislist
未定义,但在应用程序中使用了两次。thislist抱歉,忘了先复制该行。谢谢你的提醒
ui <- fluidPage(
  selectorUI(0),
  fluidRow(
    column(6, actionButton(inputId = 'insertParamBtn', label = "Add Param")),
    column(6, actionButton(inputId = 'removeParamBtn', label = "Remove Param"))
  ),
  tags$div(id = 'placeholder'),
  hr(),
  fluidRow(column(12, verbatimTextOutput("view", placeholder = T)))
)
server <- function(input, output, session) {
  callModule(selectorServer, 0)

  params <- reactiveValues(btn = 0)

  output$view <- renderPrint({ 
    print(input[[NS(params$btn, "first")]])
    print(input[[NS(params$btn, "second")]])
  })

  observeEvent(input$insertParamBtn, {
    params$btn <- params$btn + 1
    callModule(selectorServer, params$btn)
    insertUI(
      selector = '#placeholder',
      ui = selectorUI(params$btn)
    )
  })

  observeEvent(input$removeParamBtn, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#param', params$btn)
    )
    params$btn <- params$btn - 1
  })      
}
shinyApp(ui = ui, server = server)