我编写了一个基于 for 循环的脚本来读取多个 .xls 文件的列,将它们组合到一个数据框,搜索负值并使用这些值和文件名编写一个 .txt 文件。
该脚本基本上可以工作,但是我要处理数百个文件,而且速度有点慢。这个版本的脚本只是后期统计分析的一个基本框架,我想并行执行以加快速度。
我试图通过 lapply 和 plyr-package 应用函数来避免 for 循环,但是在将文件列表传递给“readWorkSheetFromFile”时遇到问题(path.expand(文件名)中的错误:“路径”参数无效)。
这是工作脚本:
require(XLConnect)
setwd(choose.dir())
input = list.files(pattern = ".xls$")
# creates empty data frame
df = data.frame(Name=NULL, PCr=NULL, bATP=NULL, Pi=NULL)
for(i in seq(along=input)){
data = data.frame(readWorksheetFromFile(input[i], sheet="Output Data",
startRow=2, startCol=c(10, 13, 16), endCol=c(10, 13, 16), header=TRUE))
head(data, n = -1L)
colnames(data) = c("PCr", "bATP", "Pi")
data$Name = file.path(input[i])
attach(data)
df = rbind(data, df)
attach(df)
rm(data)
}
# searches for negative values in df and writes to txt file
neg_val = subset(df, bATP<0 | Pi<0 | PCr<0)
write.table(neg_val, file = "neg_val.txt", sep = "\t", quote=F)
这个问题的任何解决方案,或其他加快执行速度的建议?
谢谢,马库斯