我想循环遍历多个文件并将功能应用于它们。问题是这些文件都是不同的,但命名相似的目录。通路模式类似,但数量根据它所属的家庭而变化。
例如,我的代码编写如下:
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
。
答案 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])
}