#r #dataframe #loops #unzip
#r #фрейм данных #циклы #разархивируйте
Вопрос:
У меня есть фрейм данных, который содержит все пути к файлам моего каталога и подкаталога. Мой первый набор данных содержит входной «путь»:
Input:
dataANew JerseyConstruction2020.10.27Results.zip
dataANew JerseyMaterials2020.10.27Results.zip
dataAPennsylvaniaConstruction2020.10.27Results.zip
dataAPennsylvaniaElectrician2020.10.27Results.zip
Мой второй набор данных содержит «выходной» путь:
Output:
dataANew JerseyConstruction2020.10.27
dataANew JerseyMaterials2020.10.27
dataAPennsylvaniaConstruction2020.10.27
dataAPennsylvaniaElectrician2020.10.27
Как вы можете видеть, я хочу, чтобы файлы были разархивированы в ту же папку. В настоящее время я использую цикл for без особого успеха. Это неверно для цикла?
for(i in length(input)){
for(f in length(output)){
path <- input[i]
out <- output[f]
unzip(path, out)
}}
Ответ №1:
создайте список, содержащий все файлы, которые вы хотите разархивировать. затем вы можете просто использовать lapply для разархивирования всего списка
lapply(filelist, unzip) #or sapply for data frames
если у вас много файлов (и ssd), вы можете использовать pbapply
библиотеку для встроенной панели прогресса (и многоядерной обработки, если хотите) — без ssd многоядерная обработка кажется медленнее, чем обычная lapply — я предполагаю, что это из-за скорости чтения-записи обычных жестких дисков
pblapply(filelist, unzip)
для меня это выглядит так:
file_vec<-as.vector(filelist[1:5]) # my original filelist
file_vec # is a vector
sapply(file_vec, unzip)
2020-08-01T000000_AIU-1936.ghg 2020-08-01T003000_AIU-1936.ghg 2020-08-01T010000_AIU-1936.ghg
[1,] "./2020-08-01T000000_AIU-1936.data" "./2020-08-01T003000_AIU-1936.data" "./2020-08-01T010000_AIU-1936.data"
[2,] "./2020-08-01T000000_AIU-1936.metadata" "./2020-08-01T003000_AIU-1936.metadata" "./2020-08-01T010000_AIU-1936.metadata"
[3,] "./2020-08-01T000000_AIU-1936-biomet.data" "./2020-08-01T003000_AIU-1936-biomet.data" "./2020-08-01T010000_AIU-1936-biomet.data"
[4,] "./2020-08-01T000000_AIU-1936-biomet.metadata" "./2020-08-01T003000_AIU-1936-biomet.metadata" "./2020-08-01T010000_AIU-1936-biomet.metadata"
2020-08-01T013000_AIU-1936.ghg 2020-08-01T020000_AIU-1936.ghg
[1,] "./2020-08-01T013000_AIU-1936.data" "./2020-08-01T020000_AIU-1936.data"
[2,] "./2020-08-01T013000_AIU-1936.metadata" "./2020-08-01T020000_AIU-1936.metadata"
[3,] "./2020-08-01T013000_AIU-1936-biomet.data" "./2020-08-01T020000_AIU-1936-biomet.data"
[4,] "./2020-08-01T013000_AIU-1936-biomet.metadata" "./2020-08-01T020000_AIU-1936-biomet.metadata"
я пробовал это и с zip, и это работает — я просто в основном использую данные licor, отсюда и .ghg. я работаю с Windows, рабочий каталог устанавливается туда, где находятся данные. у меня мало опыта работы с linux / macOS, но он должен работать одинаково
Комментарии:
1. Когда я использую оператор lapply, я получаю следующую ошибку: В FUN(X[[i]], …): ошибка 1 при извлечении из zip-файла
2. как выглядит ваше имя файла? я имею в виду, у вас есть полный путь или только относительные имена путей?
3. «\\data\A\New Jersey\Construction\2020.10.27\Results.zip »
4. Возможно, есть проблема со списком путей к файлам? Возможно ли это сделать, используя вектор в фрейме данных?
5. для меня это так, я добавлю это в свой ответ