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

Retrieve file information (name, size, rows and cols number) in Shiny R

我需要一个闪亮的应用程序来检索一些文件信息,如文件名、大小、行数和列数。我的最终想法是构建一个自动显示元数据的框,如果我导入另一个数据集,它也会更新。原始代码我找到了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)

我们需要读取数据集才能得到 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 <- 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)

来自运行

的输出

注意:我们也可以将两个 reactive 组合成一个,然后 return 一个 list 具有 3 个元素 - 1) 文件名,2) 文件大小 3)维度

我知道你说你想要一个 R 解决方案,但我认为如果你只考虑这个,你的选择是非常有限的。 Excel-VBA 解决方案怎么样。转到下面的 link 并下载示例文件。这应该可以满足您的所有需求,甚至更多。

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