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