【发布时间】:2012-07-02 11:23:50
【问题描述】:
我已经编写了一个基于 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)
这个问题的任何解决方案,或其他加快执行速度的建议?
谢谢, 马库斯
【问题讨论】:
-
您的速度问题可能是由于您的lack of preallocation,而不是 for 循环。 (在 R 中 for 循环本来就很慢的想法有点神话。)