2016-06-02 3 views
0

Я хотел написать цикл для преобразования файлов txt из разных папок в формат RData. Файлы имеют одно и то же имя, поэтому я хотел переименовать их условно и сохранить их в одной папке. Цикл выполняет задание, но он сохраняет одно и то же имя фрейма данных для всех файлов. Есть лучший способ сделать это?Преобразование в формат RData в цикле с разными именами фреймов

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    save <- read.table(load, sep="|", header=T) 
    save(save, file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    }} 
+0

Я сделал, это была опечатка. Различные файлы читаются каждый раз, проблема заключается в имени df ... – Mateusz

+1

Вы испытываете нестандартную оценку при работе в 'save()'. Имя df задается именем сохраняемого объекта, который на каждой итерации этого цикла равен 'save'. Вместо этого вы можете использовать 'saveRDS()' или переключиться на использование второго, а не первого аргумента 'save()', чтобы указать файл данных, который нужно сохранить. – Thomas

ответ

0

Я думаю, что следующая настройка вашего кода должна сделать трюк.

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    assign(x = save, 
      value = read.table(load, sep="|", header=T)) 
    eval(bquote(
     save(.(as.name(save)), 
      file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    )) 
    eval(bquote(rm(.(as.name(save))))) 
    }} 

assign -функция гарантирует, что содержимое файла присваивается текущим значение вашего save -объекта.

Конструкция eval + bquote + .() + as.name используются для создания (и оценки) вызова к save -функции, так что это не спасает свой save -объекта, а сохранить объект, имя которого хранится в save.

Использование rm в конце включено во избежание загромождения рабочего пространства (и связывания памяти) с содержимым из файлов.