1

Rで10個のファイルを使用したいだけです。それぞれについて何かを計算したいです。経験値 ファイル: stat1_pwg1.out stat23_pwg2.out .. stat45_pwg10.out

私はこれを試します:

for (i in 1:10){
Data=paste("../XYZ/*_pwg",i,".out",sep="")
line=read.table(Data,head=T)
}

しかし、うまくいきませんか?何か問題はありますか?

4

3 に答える 3

4

あなたの問題はワイルドカードに起因すると思われます*。これを行うためのより良い方法は、最初に を使用してファイル名を保存しdir、次に必要なものを見つけることです。

files <- dir("../XYZ",pattern="stat[0-9]+_pwg[0-9]+\.out")
for(f in files) {
  line=read.table(Data,head=T)
}

apply関数ファミリの 1 つを使用して、for ループを完全に排除することもできます。

于 2011-07-20T08:49:30.560 に答える
2

コードに関するいくつかのこと。

pasteはベクトル化されているため、ループから外すことができます。

paste("../XYZ/*_pwg", 1:10, ".out", sep = "")

(すぐにわかるように、実際にはまったく使用する必要はありませんpaste。)

read.tableワイルドカードを受け入れません。ファイル名が完全に一致する必要があります。

dirファイル名のベクトルを構築しようとするのではなく、適切な命名スキームによってフィルタリングされた、ディレクトリに存在するファイルを見つけるために使用する方がよい場合があります。

ファイルをフィルタリングするには、パターン引数で正規表現を使用します。を使用して、ワイルドカードから正規表現に変換できますglob2rx

file_names <- dir("../XYZ", pattern = glob2rx("stat*_pwg*.out"))
data_list <- lapply(filenames, read.table, header = TRUE)

ワイルドカードが何よりも数字のみに一致する、もう少し具体的な適合については、正規表現を直接使用する必要があります。

file_names <- dir("../XYZ", pattern = "^stat[[:digit:]]+_pwg[[:digit:]]+\\.out$")
于 2011-07-20T10:12:46.853 に答える