在Shiny R中检索文件信息(名称,大小,行和列号)

时间:2017-08-30 15:59:39

标签: r shiny shinydashboard

我需要一个闪亮的应用程序来检索一些文件信息,如文件名,大小,行数和列数。我最后的想法是构建一个自动显示元数据的框,如果我导入另一个数据集,它也会更新。我发现原始代码here,但我尝试修改。有帮助吗?我是Shiny R的新人。

    ui <- fluidPage(

  titlePanel("Grabbing my file name"),

  sidebarLayout(
    sidebarPanel(
      fileInput("file1", "Select your file",
                multiple = FALSE,
                accept = c("text/csv",
                           "text/comma-separated-values,text/plain",
                           ".csv",".xlsx")),
    ),
    mainPanel(
      textOutput("myFileName"),
      textOutput("myFileSize"),
      textOutput("myFileRow"),
      textOutput("myFileCol"),

    )
  )
)

server <- function(input, output) {

  file_name <- reactive({
    inFile <- input$file1
    if (is.null(inFile)){
      return(NULL)
      }else{
        return (inFile$name)
      }
  })
  output$myFileName <- renderText({ file_name() })

  file_size <- reactive({
    inFile <- input$file1
    if (is.null(inFile)){
      return(NULL)
    }else{
      return (file.size(inFile$name))
    }
  })
  output$myFileSize <- renderText({ file_size() })

  file_row <- reactive({
    inFile <- input$file1
    if (is.null(inFile)){
      return(NULL)
    }else{
      return (nrow(inFile))
    }
  })
  output$myFileRow <- renderText({ file_row() })

  file_col <- reactive({
    inFile <- input$file1
    if (is.null(inFile)){
      return(NULL)
    }else{
      return (ncol(inFile))
    }
  })
  output$myFileCol <- renderText({ file_col() })

}

# Run the application 
shinyApp(ui = ui, server = server)

2 个答案:

答案 0 :(得分:1)

我们需要读取数据集才能获得ncol/nrow。读取数据并获得ncol/nrow(我们使用dim来获取数据而不是重复ncol/nrow会更有效。

library(shiny)

-ui

ui <- fluidPage(

  titlePanel("Grabbing my file name"),

  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Select your file',
                accept = c(
                  'text/csv',
                  'text/comma-separated-values',
                  '.csv'
                )
      )
    ),
    mainPanel(
      textOutput("myFileName"),
      textOutput("myFileSize"),
      textOutput("myFileColrow")

    )
  )
)

-server

server <- function(input, output) {

  file_name <- reactive({
    inFile <- input$file1

    if (is.null(inFile))
      return(NULL) else return (tools::file_path_sans_ext(inFile$name))
  })     

  file_colrowsize <- reactive({
    inFile <- input$file1
    if (is.null(inFile)){
      return(NULL)
    }else{
     tmp <- read.csv(inFile$datapath)  
      return (list(dim(tmp), object.size(tmp)))
    }
  })      

  output$myFileName <- renderText({ file_name() })
  output$myFileColrow <- renderText({ file_colrowsize()[[1]] })
  output$myFileSize <- renderText({file_colrowsize()[[2]]})     

}

- 运行应用程序

shinyApp(ui = ui, server = server)

正在运行的输出

enter image description here

enter image description here

注意:我们也可以将两个reactive合并为一个,然后返回list个3个元素 - 1)文件名,2)文件大小3)尺寸

答案 1 :(得分:0)

我知道你说你想要一个R解决方案,但我认为你的选择非常有限,如果你只考虑这个。如何使用Excel-VBA解决方案。转到下面的链接并下载示例文件。这应该做你想要的一切,还有更多。

http://learnexcelmacro.com/wp/2011/11/how-to-get-list-of-all-files-in-a-folder-and-sub-folders/