Quarantain
Quarantain

Reputation: 51

How can I use a variable as an argument to a function, specifically unz() in R

I am writing an R function that reads CSV files from a subdirectory in a ZIP file without first unzipping it, using read.csv() and unz().

The CSV files are named with leading 0 as in 00012.csv, 00013.csv etc.

The function has the following parameters: MyZipFile, ASubDir, VNum (a vector e.g. 1:42) which forms the filename.

What I want is to use the variable PathNfilename in unz().

# Incorporate the directory in the ZIP file while constructing the filename using stringr package
PathNfilename <- paste0("/", ASubDir, "/", str_pad(Vnum, 5, pad = "0"), ".csv", sep="")     

What works is:

csvdata <- read.csv(unz(description = "MyZipFile.zip", filename = "ASubDirectory/00039.csv"), header=T, quote = "")

What I need is something along these lines of this:

csvdata <- read.csv(unz(description = "MyZipFile.zip", filename = PathNFileName), header=T, quote = "")

The error that I get is:

Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
cannot locate file '/ASubDir/00039.csv' in zip file 'MyZipFile.zip'

I'd like to understand why I'm getting the error and how to resolve it. Is it a scoping issue?

Upvotes: 0

Views: 178

Answers (1)

cderv
cderv

Reputation: 6542

Try with some PathFilename without the leading /

ASubDir <- "ASubDirectory"
Vnum <- 1:5

PathNfilename <- file.path(ASubDir, 
                           paste0(str_pad(Vnum, 5, pad = "0"), ".csv")
)

PathNfilename
#> [1] "ASubDirectory/00001.csv" "ASubDirectory/00002.csv"
#> [3] "ASubDirectory/00003.csv" "ASubDirectory/00004.csv"
#> [5] "ASubDirectory/00005.csv"

Upvotes: 0

Related Questions