Create a data frame using text input in Shiny

13,996

I would recommend using the matrixInput function of the shinyIncubator package. I have made a demo here: https://gist.github.com/anonymous/8207166. You can run it from RStudio with:

library("shiny")
runGist("https://gist.github.com/anonymous/8207166")

But to answer your question based on your code, below is a modification that works. Note that the function renderTable() takes arguments that allow you to control the display of the data.frame. The advantage of using the matrixInput function is that you can make the size of your dataframe reactive, whereas below it is hard-coded as a 2 variable dataframe.

ui.R

library("shiny")    
shinyUI(
  pageWithSidebar(
    headerPanel("textInput Demo")
    ,
    sidebarPanel(
      wellPanel(
        textInput('x', "enter X value here","")
        ,
        textInput('y', "enter Y value here","")
        ,
        actionButton("submit","Submit")
      )
    )
    ,
    mainPanel(uiOutput('table'))
))

server.R

library("shiny")
shinyServer(
  function(input,output,session){

    Data = reactive({
      if (input$submit > 0) {
          df <- data.frame(x=input$x,y=input$y)
          return(list(df=df))
      }
    })

    output$table <- renderTable({
        if (is.null(Data())) {return()}
        print(Data()$df)
      }, 'include.rownames' = FALSE
       , 'include.colnames' = TRUE
       , 'sanitize.text.function' = function(x){x}
    )

})
Share:
13,996
Punith
Author by

Punith

Updated on June 15, 2022

Comments

  • Punith
    Punith almost 2 years

    Trying to create a data frame like below;

    X   Y
    20  30
    

    Using textInput to create data frame.
    But values entered in text area are not assigning properly to data frame.

    Could you please help me?

    ui.R

    library(shiny)
    shinyUI(pageWithSidebar(
      headerPanel( "", ""),
      sidebarPanel(
    
        wellPanel(
          textInput('datavalues', "variable values",""),
          actionButton("submit","Apply")
    
        )
      ),
    
      mainPanel(   
        verbatimTextOutput('datatable')
      )
    ))
    

    server.R

    library(shiny)
    shinyServer(function(input,output,session){
    
      data1= reactive({
        if(input$submit!=0){
          isolate({
            data.frame(paste(input$datavalues))
          })
        }
      })
    
      output$datatable<-renderPrint(function(){
        if(!is.null(data1())){
          d<-data1()
          print(d)
        }
      })
    
    
    })
    
  • bright-star
    bright-star over 10 years
    This is also very helpful for non-numeric input. Thanks.
  • CoderGuy123
    CoderGuy123 almost 9 years
    The gist does not work for me. > library("shiny") > runGist("gist.github.com/anonymous/8207166") Downloading gist.github.com/anonymous/8207166/download Error in rawToChar(block[seq_len(ns)]) : embedded nul in string: 'PK\003\004\n\0\0\0\0\0T\034!D\0\0\0\0\0\0\0\0\0\0\0\0\017\0‌​\t\08207166-master/U‌​T\005\0\001PýÃRPK\00‌​3\004\n\0\0\0\b\0T\0‌​34!Dt¤k‚\002\001\0\0‌​Õ\001\0\0\027\0\t\08‌​207166-master/s'
  • hvollmeier
    hvollmeier almost 9 years
    @Deleet, I got the same error. Copy & Paste the code in a new shiny project. It runs just fine.