在Shiny上传文件时出现问题

时间:2014-07-10 22:29:11

标签: r shiny

我正在尝试创建一个简单的程序来上传和显示Shiny中的.csv文件的内容。我从闪亮的网站上复制粘贴了文件上传示例,但它没有用。输出表只显示“X.object.Object”。我收到警告:

Warning in read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on     '/var/folders/2d/2vmslzld48xf_y40rjg3sry00000gp/T//RtmpRLx4Va/aa2cf08f688d80f5d1fd5209/0'
Warning in matrix(align.tmp[(2 - pos):(ncol(x) + 1)], nrow = nrow(x), ncol = ncol(x) +  :
  data length exceeds size of matrix

我做了一些额外的元素来显示Shiny文件上传输入中的文件对象,以及file.info在它给出的文件路径上的结果。 Shiny输入对象看起来很好(正确检测文件类型和大小),但file.info表示它应该是几kb时只有15个字节长。使用readChar将文件的内容作为简单字符串获取也不起作用。从控制台读取read.csv或readChar文件可以正常工作。我认为它在某种程度上不会在上传时正确保存文件。我怎么检查这个?

ui.R:

shinyUI(fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose file to upload',
                accept = c(
                  'text/csv',
                  'text/comma-separated-values',
                  'text/tab-separated-values',
                  'text/plain',
                  '.csv',
                  '.tsv'
                )
      ),
      tags$hr(),
      checkboxInput('header', 'Header', TRUE),
      radioButtons('sep', 'Separator',
                   c(Comma=',',
                     Semicolon=';',
                     Tab='\t'),
                   ','),
      radioButtons('quote', 'Quote',
                   c(None='',
                 'Double Quote'='"',
                     'Single Quote'="'"),
                   '"')
    ),
    mainPanel(
      tableOutput('contents'),
      tableOutput('stuff1'),
      tableOutput('stuff2'),
      textOutput('moreStuff')
    )
  )
))

server.R

# By default, the file size limit is 5MB. It can be changed by
# setting this option. Here we'll raise limit to 9MB.
options(shiny.maxRequestSize = 10*1024^2)

shinyServer(function(input, output) {
  output$contents <- renderTable({
    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, it will be a data frame with 'name',
    # 'size', 'type', and 'datapath' columns. The 'datapath'
    # column will contain the local filenames where the data can
    # be found.

    inFile <- input$file1

    if (is.null(inFile))
      return(NULL)

    read.csv(inFile$datapath)
  })

  output$stuff1 <- renderTable({
    inFile <- input$file1

    if (is.null(inFile))
      return(NULL)

    file.info(inFile$datapath)[c("size", "isdir", "mode", "uid", "gid", "uname", "grname")]
  })

  output$stuff2 <- renderTable({
    inFile <- input$file1

    if (is.null(inFile))
      return(NULL)

    as.data.frame(inFile)
  })

  output$moreStuff <- renderText({
    inFile <- input$file1

    if (is.null(inFile))
      return(NULL)

    readChar(inFile$datapath, inFile$size)
  })
})

0 个答案:

没有答案