开发者

R read files with for loop

开发者 https://www.devze.com 2023-03-21 08:55 出处:网络
开发者_如何学PythonI just want to use use 10 files in R. For each I want to calculate something.
开发者_如何学Python

I just want to use use 10 files in R. For each I want to calculate something. Exp. file: stat1_pwg1.out stat23_pwg2.out .. stat45_pwg10.out

I try this:

for (i in 1:10){
Data=paste("../XYZ/*_pwg",i,".out",sep="")
line=read.table(Data,head=T)
}

But it does not work? Any hinds?


I suspect your problem comes from the wildcard *. A better way to do this might be to first store the file names using dir, then find the ones you want.

files <- dir("../XYZ",pattern="stat[0-9]+_pwg[0-9]+\.out")
for(f in files) {
  line=read.table(Data,head=T)
}

You could also use one of the apply family of functions to eliminate the for loop entirely.


A few things about your code.

paste is vectorised, so you can take it out of the loop.

paste("../XYZ/*_pwg", 1:10, ".out", sep = "")

(Though as you'll see in a moment, you don't actually need to use paste at all.)

read.table won't accept wildcards; it needs an exact match on the file name.

Rather than trying to construct a vector of the filenames, you might be better using dir to find the files that exist in your directory, filtered by a suitable naming scheme.

To filter the files, you use a regular expression in the pattern argument. You can convert from wildcards to regular expression using glob2rx.

file_names <- dir("../XYZ", pattern = glob2rx("stat*_pwg*.out"))
data_list <- lapply(filenames, read.table, header = TRUE)

For a slightly more specific fit, where the wildcard only matches numbers than anything, you need to use regular expressions directly.

file_names <- dir("../XYZ", pattern = "^stat[[:digit:]]+_pwg[[:digit:]]+\\.out$")


    files <- dir(pattern="*Rip1_*")

    files

    for (F in files){ assign(F , Readfunc(F))}
0

精彩评论

暂无评论...
验证码 换一张
取 消