在Shiny中上传具有不同分隔符的多个文件

时间:2016-02-12 02:00:52

标签: r csv shiny

我的目标是上传两个或多个文件,其中每个文件都有不同的分隔符。下面的ui.R和server.R代码提供了一个在读入两个文件并具有相同分隔符时运行良好的示例。

但是,如果我读入file1,比如说.csv,然后用不同的分隔符读取file2,那么一旦我更改了分隔符,file1就会受到影响并丢失其结构。

目标是在file1中读取其预期的分隔符,然后在file2中读取,使其对file1没有影响。

server.R文件

    options(shiny.maxRequestSize = 9*1024^2)
    shinyServer(function(input, output) {

    output$contents1 <- renderTable({
    inFile <- input$file1
    if (is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath, header = input$header,
             sep = input$sep, quote = input$quote)
    })

    output$contents2 <- renderTable({
    inFile <- input$file2
    if (is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath, header = input$header,
             sep = input$sep, quote = input$quote)
    })
    })

ui.R

shinyUI(fluidPage(
titlePanel("Uploading Files"),
sidebarLayout(
        sidebarPanel(
        fileInput('file1', 'Choose file 1 to upload',
        accept = c('text/csv','text/comma-separated-values',
        'text/tab-separated-values', 'text/plain',
        '.csv', '.tsv')
        ),
        fileInput('file2', 'Choose file 2 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',Pipe='|'),
        ','),
        radioButtons('quote', 'Quote',
        c(None='','Double Quote'='"',
        'Single Quote'="'"),
        '"'),
        tags$hr()
        ),
        mainPanel(
        tableOutput('contents1'),
        tableOutput('contents2')
        )
        )
        ))

1 个答案:

答案 0 :(得分:0)

我意识到这不是同时使用两者的直接解决方案,但是你可以创建第二对单选按钮来关联你输入的第二个文件吗?

这就是我的意思。

Shiny

如果你能以某种方式将第二个分隔符放在分隔符旁边,并且第二个引号与quote相邻,那么会有什么好处。我并不擅长如何进行应用程序的布局,但下面的链接可能有助于解决这个问题。

<强> shiny 4 small textInput boxes side-by-side

尝试通过用radiobuttons替换textInput语句,看看你是否可以玩弄它。

我之前遇到过闪亮接受一个输入到ui中的多个输入或对象的问题,这是一种绕过它的方法。我不确定为什么闪亮有这个问题。对于比我更有资格的人来说,这是一个问题。