2012-04-12 4 views
-1

Этот код ниже предназначен для чтения и циклизации через несколько двоичных файлов (365) в течение одного года в одной папке. На самом деле у меня много папок в течение многих лет, 365 файлов 2000 года в одной папке, 365 файлов 2001 года в другой папке и так далее.Как читать несколько двоичных файлов в разных папках в R?

Мой вопрос: как я могу перебирать из года в год (из одной папки в другую)?

setwd("C:\\PHD\\Climate Data\\Wind\\") 
listfile<-dir() 
for (i in c(1:365)) { 
    conne <- file(listfile[i], "rb") 
    file<- readBin(conne, integer(), size=2, n=360*720, signed=T) 
    file<-file-273.15 # 
    close(conne) 
    to.write = file(paste("C:\\PHD\\Climate Data\\Out\\Temperature_",i,".dat",sep=""),"wb") 
    writeBin(file, to.write) 
    close(to.write) 
} 
+1

Чтобы улучшить ваши шансы получить помощь, вы должны, вероятно, «принять» прошлые ответы, которые вам помогли (например, [этот] (http://stackoverflow.com/a/10090849/903061)), нажав галочку на слева от ответа. – Gregor

+0

Дубликат вашего предыдущего вопроса http://stackoverflow.com/questions/10032052/how-do-i-read-multiple-binary-files-in-r –

+0

Действительно, я ответил на этот вопрос раньше ... http: //stackoverflow.com/questions/10032052/how-do-i-read-multiple-binary-files-in-r –

ответ

0

Там целый ряд шагов, которые необходимо предпринять:

  • Вы можете использовать list.files, чтобы создать список файлов в каталоге strucutre. Обязательно установите recursive на TRUE, чтобы пройти по всему дереву, и установить full.names на TRUE, чтобы получить имена файлов, включая подкаталог.
  • После того как вы прочитали этот список файлов, я бы использовал ldply форму plyr, чтобы получить все файлы.

Наконец, пример в (непроверенные псевдо) кода, который считывает все данные выглядит примерно так:

list_of_files = list.files("datadir", recursive = TRUE, full.names = TRUE) 
dat = l_ply(list_of_files, function(fname) { 
    dum_data = readBin(fname) 
    writeBin(dum_data) 
    }) 

dat будет теперь data.frame, который содержит данные, плюс связанное с ней время. Просто замените функцию тем, что вам нравится, чтобы заставить ее работать для вашего примера.

+0

Большое спасибо. Однако, это немного сложнее. Я не совсем понял это. Итак, как мне вставить вышеприведенный цикл, который я написал в этом, который вы написали. Я действительно не понял, что вы подразумеваете под этим: (Просто замените функцию тем, что вам нравится, чтобы заставить ее работать для вашего примера). – hkfidd

+0

Бит кода, который, как вы знаете, внутри цикла for, вы можете ввести в функцию и использовать в plyr. Для получения дополнительной информации о том, как работает plyr в целом, прочитайте статью, написанную автором по адресу http://www.jstatsoft.org/v40/i01 –

+0

. Я изменил пример, чтобы более точно соответствовать вашей проблеме. –

Смежные вопросы