2014-05-15 16 views
5

tenta di creare un file zip da una cartella utilizzando R.Creazione file zip dalle cartelle in R

E 'ricordato pacchetto "Rcompression" qui: Creating zip file from folders

Ma non ho trovato dove posso scaricare questo pacchetto per il sistema Windows.

Qualche suggerimento? o altre funzioni per creare un file zip?

+0

è possibile chiamare comandi di sistema da r. anche '? tar' sarebbe più facile. Non vedo perché tu abbia bisogno di un pacchetto per fare questo – rawr

+0

@rawr, non è una piattaforma facile. – jdharrison

+0

oh. stai lavorando su una piattaforma non windows, unix o mac? – rawr

risposta

1

È possibile installare dalle omegahat pronti contro termine:

install.packages('Rcompression', repos = "http://www.omegahat.org/R", type = "source") 

per le finestre che sarà necessario passare attraverso cerchi di installare zlib e bzip2 e collegano in modo appropriato.

utils::zip può essere utilizzato in alcuni casi. Ci sono una serie di problemi con esso. Un caso è che la lunghezza massima della stringa che è possibile utilizzare al prompt dei comandi è di 8191 caratteri (2047 caratteri su alcune versioni) per Windows. Se si sta comprimendo una directory con un sacco di caratteri per i nomi di directory/file, ciò causerà problemi. Ad esempio, se si zip la directory del profilo firefox. Inoltre ho trovato che il comando zip doveva essere rilasciato relativamente alla directory che stavo comprimendo per usare nomi di directory relativi. Rcompression ha un argomento altNames che gestisce questo. Detto questo, ho sempre avuto problemi a far funzionare Rcompression su Windows.

13

È possibile creare un file zip con la funzione zip dal pacchetto utils abbastanza facilmente. Diciamo che avete una directory testDir e si desidera comprimere un file (o più file) all'interno della directory,

dir('testDir') 
# [1] "cats.csv" "test.csv" "txt.txt" 
zip(zipfile = 'testZip', files = 'testDir/test.csv') 
# adding: testDir/test.csv (deflated 68%) 

Il file compresso viene salvato nella directory di lavoro corrente, a meno che un percorso diverso è specificato nell'argomento zipfile . Possiamo vedere la sua dimensione relativa al file decompresso originale con

file.info(c('testZip.zip', 'testDir/test.csv'))['size'] 
#     size 
# testZip.zip  805 
# testDir/test.csv 1493 

È possibile comprimere l'intera directory di file (se sotto-cartelle) con

files2zip <- dir('testDir', full.names = TRUE) 
zip(zipfile = 'testZip', files = files2zip) 
# updating: testDir/test.csv (deflated 68%) 
# updating: testDir/cats.csv (deflated 27%) 
# updating: testDir/txt.txt (stored 0%) 

E unzip di esso per visualizzare i file,

unzip('testZip.zip', list = TRUE) 
#    Name Length    Date 
# 1 testDir/test.csv 1493 2014-05-14 20:54:00 
# 2 testDir/cats.csv 116 2014-05-14 20:54:00 
# 3 testDir/txt.txt  32 2014-05-08 09:37:00 

Nota: Da ?zip, per quanto riguarda l'argomento zip.

Su Windows, il predefinito si basa su un programma zip (ad esempio quello di Rtools) che si trova nel percorso.

+0

Se voglio chiudere la cartella "testDir", come dovrei fare vero? Può includere alcune sottocartelle all'interno. Ho aggiunto questo: zip ('testZip', files = 'testDir /'), ma non ha funzionato. –

+0

Vuoi chiudere anche le sottocartelle? –

+0

Non riesco a trovare il file zip dopo aver eseguito lo script. Il file zip è nella stessa directory? –

0

fanno si che

#Convertir todas las carpetas en .zip 
    d <- "C:/Users/Eric/Documents/R/win-library/3.3" 
    array <- list.files(d) 

    for (i in 1:length(array)){ 
     name <- paste0(array[i],".zip") 

     zip(name, files = paste0(d,paste0("/",array[i]))) 
    } 
0

Per evitare (a) un problema con percorsi relativi (cioè, Il file zip contenente in sé una struttura di cartelle con il percorso della cartella piena di essere zippato) e (b) for loop (o meglio, di stile), è possibile utilizzare

my_wd<-getwd() # save your current working directory path 
dest_path<-"C:/.../folder_with_files_to_be_zipped" 
setwd(dest_path) 
files<-list.files(dest_path) 
named<-paste0(files,".zip") 
mapply(zip,zipfile=named,files=files) 
setwd(my_wd) # reset working directory path 

differenza R's build-in unzip funzione, zip richiede un programma zip come 7-zip (Windows) o quello che fa parte di Rtools per essere presente nel tuo percorso di sistema.

Problemi correlati