如何循环不同目录中的文件

use*_*449 0 loops r

我想循环遍历多个文件并将一个函数应用于它们.问题是这些文件都是不同的,但命名相似的目录.路径模式类似,但数量根据其所属的家庭而变化.

例如,我的代码编写如下:

for(i in 1:numfiles) {
    olddata <- read.table(paste("/home/smith/Family", i, "/Family", i, ".txt", sep="\t"),
                          header=T)      
    # FUNCTION GOES HERE

    write.table(newdata,
                paste("/home/smith/Family", i, "/Family", i, "test.txt",
                      sep = ",", quote=F, row.names=F)
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是家庭号码不按数字顺序排列.有些标记只是一个号码(例如:2)等都有附加到这个数字一个字母(例如:1a)

在每个族子目录(即Family i)中,我想在同一个文件中调用(文件名完全相同,但数字(i)根据它所引用的族来改变).我想循环这些特定的文件.例如......对于家庭1a,文件在这里:"/ home /smith/Family1a/Family1a.txt"但是对于家庭2,文件在这里:"/ home /smith/Family2/Family2txt".

另外,R不喜欢我的使用numfiles.

sgi*_*ibb 10

看看?list.files?dir,例如:

files <- list.files("/home/smith", pattern="Family[[:alnum:]]+.txt", recursive=TRUE, full.names=TRUE)

for (currentFile in files) {
  olddata <- read.table(currentFile, header=TRUE)
  ## some code
  write.table(newdata, file=sub(pattern=".txt$", replacement="test.txt", x=currentFile))
}
Run Code Online (Sandbox Code Playgroud)

要么:

dirs <- dir("/home/smith", pattern="Family[[:alnum:]]+$")

fileName <- file.path(dirs, paste0(dirs, ".txt"))
testFileName <- file.path(dirs, paste0(dirs, "_test.txt"))

for (i in seq(along=fileName))

  olddata <- read.table(fileName[i], header=TRUE)
  ## some code
  write.table(newdata, file=testFileName[i])
}
Run Code Online (Sandbox Code Playgroud)