【问题标题】:R Shiny - How to connect string and number to new string and printR Shiny - 如何将字符串和数字连接到新字符串并打印
【发布时间】:2016-08-30 14:13:52
【问题描述】:

我有以下问题:我想编写一个闪亮的应用程序,允许输入一个变量名(例如“test”)和一个数字(例如“5”),以便这些变量名的向量从一到显示输入编号(“test1”、“test2”、“test3”、“test4”、“test5”)。但不知何故,它不起作用。

server.r:

library(shiny)

server <- function(input,output){

  output$varName<-renderUI({
      textInput("name", "Variable Name", value = "test")
  })

  output$number<-renderUI({
      numericInput("number", "Number", value = 5, min = 0, max = 10)
  })

  connect=reactive({
      name<-input$name
      n<-input$number
      var.names<-rep(name, n)
      var.names.n<-paste(var.names,seq(1:n),sep=",")
  })

  output$view <- renderPrint({
      connect()$var.names.n
  })

}

还有 ui.r:

library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("Set Variable Names"),

  sidebarPanel(
    uiOutput("varName"),
    uiOutput("number")
  ),

  mainPanel(
    textOutput("view")
  )
))

如果有人能看一下就太好了:)

非常感谢!

【问题讨论】:

  • 确保connect() 在所有情况下都返回一个值。你检查过吗?

标签: r shiny


【解决方案1】:

你的 connect() 什么都不返回

1) 添加返回以连接响应式

2) 编辑渲染打印

3) 添加检查输入是否存在

4) 添加检查 input$number 是否大于 0

例子

connect=reactive({
    if(!is.null(input$name) & ! is.null(input$number) ){
      if(input$number>0){
      name<-input$name
      n<-input$number
      var.names<-rep(x=name, times=n)
      var.names.n<-paste(var.names,seq(1:n),sep="")
      return(var.names.n)
      }
    }
  })

  output$view <- renderPrint({

    connect()
  })

【讨论】:

    【解决方案2】:

    感谢@Batanichek 的is.null 条件检查,这解决了初始错误。

    ui.r:

    library(shiny)
    
    shinyUI(pageWithSidebar(
    
      headerPanel("Set Variable Names"),
    
      sidebarPanel(
        uiOutput("varName"),
        uiOutput("number")
      ),
    
      mainPanel(
        textOutput("view")
      )
    ))
    

    server.r:

    library(shiny)
    
    server <- function(input,output){
    
      output$varName<-renderUI({
        textInput("varName", "Variable Name", value = "test")
      })
    
      output$number<-renderUI({
        # please note that an input value of 0 will cause a problem below.
        numericInput("number", "Number", value = 5, min = 0, max = 10)
      })
    
      connect<-reactive({
    
        if(!is.null(input$varName) && ! is.null(input$number) ){
        name<-input$varName
        n<-input$number
        var.names<-rep(name, n)
        var.names.n<-paste(var.names,seq(1:n),sep="")
        return (var.names.n)
        }
      })
    
      output$view <- renderPrint({
        connect()
      })
    
    }
    

    【讨论】:

    • 查看 input$number=0 或以下的结果...(seq (1:0)==c(1,2))最好添加一些解释
    猜你喜欢
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2014-10-11
    • 2011-01-24
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2014-04-29
    相关资源
    最近更新 更多