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

时间:2013-09-11 21:11:50

标签: r loops

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

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

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)
}

我遇到的问题是家庭号码不按数字顺序排列。有些标签只标有数字(例如:2),其他标签上附有一个字母(例如:1a

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

此外,R不喜欢我使用numfiles

1 个答案:

答案 0 :(得分: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))
}

或者:

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])
}