R читать файлы с цикла for - PullRequest
1 голос
/ 20 июля 2011

Я просто хочу использовать 10 файлов в R. Для каждого я хочу что-то посчитать.Exp.file: 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)
}

Но это не работает?Есть какие-нибудь шумы?

Ответы [ 3 ]

4 голосов
/ 20 июля 2011

Я подозреваю, что ваша проблема связана с подстановочным знаком *. Лучший способ сделать это - сначала сохранить имена файлов с помощью dir, а затем найти нужные.

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

Вы также можете использовать одну из функций семейства apply, чтобы полностью исключить цикл for.

2 голосов
/ 20 июля 2011

Несколько вещей о вашем коде.

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$")
0 голосов
/ 27 марта 2017
    files <- dir(pattern="*Rip1_*")

    files

    for (F in files){ assign(F , Readfunc(F))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...