複数の .xls ファイルの列を読み取り、それらを 1 つのデータ フレームに結合し、負の値を検索し、これらの値とファイルの名前を含む .txt ファイルを書き込む for ループに基づくスクリプトを作成しました。
スクリプトは基本的に動作しますが、数百のファイルを処理する必要があり、少し遅いです。このバージョンのスクリプトは、後で統計分析を行うための基本的なフレームワークにすぎません。実行を並列化して高速化したいと考えています。
lapply と plyr-package を介して関数を適用することで for ループを回避しようとしましたが、ファイル リストを "readWorkSheetFromFile" に渡す際に問題がありました (path.expand (ファイル名) のエラー: 無効な 'path' 引数)。
作業スクリプトは次のとおりです。
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)
この問題の解決策、または実行を高速化するための他の提案はありますか?
ありがとう、マーカス