防止easycsv::fread_zip保存解压缩的文件

wydwbb8l  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(109)

我想加载(许多).zip文件,每个包含(许多)txt文件。我知道一个简单的方法是使用easycsv::fread_zip(或easycsv::fread_folder用于多个zip文件)。这似乎工作,但有不受欢迎的属性,自动保存所有提取的文件在我的R项目根目录,这似乎是一个没有文档的功能,这些函数(除非我错过了它!)。有没有办法防止这种情况发生?或者是否有替代easycsv::fread_zip的方法?谢谢
比如说

require(easycsv)
  filezip <- system.file("exampleZips", "example_tables.zip", package="easycsv")
  fread_zip(filezip)

  fread_zip(filezip, extension = "CSV")

在我的R项目根目录中创建这些文件

eblbsuwk

eblbsuwk1#

切换到一个临时目录,运行fread_zip,然后切换回来。退出R时,临时目录将被删除。
请注意,require应该只在if中使用,以确保如果出现问题,它会在该点被捕获。要加载不带if的包,请使用library

library(easycsv)

odir <- setwd(tempdir(check = TRUE))
fread_zip(filezip)
setwd(odir)

或者考虑使用自己的函数。除了输入测试文件之外,它不使用easycsv。

library(data.table)

# fread those files from zip file at full path x whose names match pat
# returning list of data tables.
read_zip <- function(x, pat = "\\.csv$") {
  on.exit({ file.remove(Files); setwd(odir) })
  odir <- setwd(tempdir(check = TRUE))
  Files <- unzip(zipfile = x)
  Map(fread, grep(pat, Files, value = TRUE))
}

# test
filezip <- system.file("exampleZips", "example_tables.zip", package="easycsv")
L <- read_zip(filezip)
# list2env(L, .GlobalEnv) # optionally put data tables in global env

相关问题