【问题标题】:Create a data frame using text input in Shiny在 Shiny 中使用文本输入创建数据框
【发布时间】:2013-11-11 10:44:00
【问题描述】:

尝试创建如下所示的数据框;

X   Y
20  30

使用 textInput 创建数据框。
但是在文本区域中输入的值没有正确分配给数据框。

你能帮帮我吗?

ui.R

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel( "", ""),
  sidebarPanel(

    wellPanel(
      textInput('datavalues', "variable values",""),
      actionButton("submit","Apply")

    )
  ),

  mainPanel(   
    verbatimTextOutput('datatable')
  )
))

服务器.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)
    }
  })


})

【问题讨论】:

  • 您需要像解析任何其他文本正文一样解析文本字段中的数据。对于初学者,请尝试将静态文件中的数据读入 data.frame。一旦你开始工作,然后尝试将其合并到 Shiny 中。特别是,请查看 read.csv 或 read.table 函数以使用表格文本创建 data.frames。
  • 我试过 data.frame(eval(parse(input$datavalues)))。但它不起作用。
  • 是的。查看read.table() 的文档。您可以通过输入命令?read.table 将其拉起。这就是您要使用的功能。您甚至可能会发现read.table("yourFileName.txt") 会立即生效。然后你可以开始研究如何使用文本字符串而不是文件。
  • 我不想使用现有文件。只是我想使用闪亮的文本输入创建一个只有一行的数据集。

标签: r shiny shiny-server


【解决方案1】:

我会推荐使用 shinyIncubator 包的 matrixInput 函数。我在这里做了一个演示:https://gist.github.com/anonymous/8207166。你可以从 RStudio 运行它:

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

但要根据您的代码回答您的问题,下面是一个有效的修改。请注意,函数 renderTable() 接受允许您控制 data.frame 显示的参数。使用 matrixInput 函数的优点是您可以将数据框的大小设置为反应式,而在下面它被硬编码为 2 变量数据框。

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

服务器.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}
    )

})

【讨论】:

  • 这对于非数字输入也很有帮助。谢谢。
  • 要点对我不起作用。 > library("shiny") > runGist("gist.github.com/anonymous/8207166") 下载 gist.github.com/anonymous/8207166/download rawToChar(block[seq_len(ns)]) 中的错误:字符串中嵌入 nul:'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/UT\005\0\ 001PýÃRPK\003\004\n\0\0\0\b\0T\034!Dt¤k‚\002\001\0\0Õ\001\0\0\027\0\t\08207166-master/s '
  • @Deleet,我遇到了同样的错误。将代码复制并粘贴到一个新的闪亮项目中。它运行得很好。
猜你喜欢
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 2019-04-28
  • 2019-02-07
  • 2021-12-12
  • 2016-09-08
相关资源
最近更新 更多