Create a data frame using text input in Shiny

允我心安 提交于 2019-12-04 12:14:08

问题


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)
    }
  })


})

回答1:


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}
    )

})


来源:https://stackoverflow.com/questions/19706320/create-a-data-frame-using-text-input-in-shiny

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!