【问题标题】:Unexpected values from text input in RshinyRshiny 中文本输入的意外值
【发布时间】:2015-07-30 20:12:54
【问题描述】:

我正在制作一个应用程序,该应用程序从滑块获取输入以创建匹配数量的输入文本框。但是,当我从输入框中打印值时,它并不总是更新。

示例: 在滑块输入上选择 3。将1,2,3分别放入3个文本框中。点击提交。打印数字 = 1 数字 = 2 数字 = 3。当我将滑块移动到 2 并按 Enter 键时,我得到数字 = 1 数字 = 2,尽管文本输入中不再存在任何值。如果我将滑块移动到 4,我将得到输出编号 = NA 编号 = NA 编号 = 3 编号 = NA。

显然它会记住以前的输入值,但我不明白为什么或如何修复它。

ui.R
shinyUI(fluidPage(
  fluidRow(
  column(4, wellPanel(
    sliderInput("numObs", "Number of observations", 1, 30, 3),
    uiOutput("buttons"),
    submitButton(text = "Apply Changes", icon = NULL)
)),
column(8,
       textOutput("a")
)

) ))

server.R
shinyServer(function(input, output) {
  output$buttons <- renderUI({
    obs <- input$"numObs";
    objs <-list();
    for (i in 1:obs ){
      objs <- list(objs, numericInput(inputId = paste0("t", i), "Day:", NA),br());
    }        
  objs <- fluidRow(objs);
  })

  t<- function(){
    for(i in 1:input$"numObs"){
      if(i ==1){
        t <- c(as.numeric(input[[paste0("t",i)]])[1]);
      }
      else{
        t <- c(t,as.numeric(input[[paste0("t",i)]])[1]);
      }
    }
    return(t);
  }

  output$a<- renderText({
  paste("number = ", t());
  })
})

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我对您的代码进行了一些更改并介绍了一些内容。使用actionButton 比使用submitButton 更好,因为它更灵活。如果您不喜欢actionButton 的风格,请查看Shiny Themes

    rm(list = ls())
    library(shiny)
    
    ui =(fluidPage(
      fluidRow(
        column(4, wellPanel(
          sliderInput("numObs", "Number of observations", 1, 30, 3),
          uiOutput("buttons"),
          actionButton("goButton", "Apply Changes")
        )),
        column(8,textOutput("a"))
      ) ))
    
    server = (function(input, output) {
    
      output$buttons <- renderUI({
        obs <- input$"numObs";
        objs <-list();
        for (i in 1:obs ){
          objs <- list(objs, numericInput(inputId = paste0("t", i), "Day:", NA),br());
        }        
        objs <- fluidRow(objs);
      })
    
    # keep track if the Number of obseervations change
      previous <- eventReactive(input$goButton, {
        input$numObs
      })
    
      t <- eventReactive(input$goButton, {
    
        for(i in 1:input$"numObs"){
          if(i ==1){
            t <- c(as.numeric(input[[paste0("t",i)]])[1]);
          }
          else{
            t <- c(t,as.numeric(input[[paste0("t",i)]])[1]);
          }
        }
        return(t)
      })
    
      output$a<- renderText({
        if(previous() != input$numObs){
          return()
        }
        paste("number = ", t());
      })
    })
    runApp(list(ui = ui, server = server))
    

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      相关资源
      最近更新 更多