2015-03-11 21 views
7

Ho già provato a risolvere il mio problema adattando questo similar question. Tuttavia, ottengo il seguente errore per l'URL o il file con cui voglio farlo.Download ed estrazione di file di dati .gz utilizzando R

trying URL 'http://cbio.mskcc.org/microrna_data/human_predictions_S_C_aug2010.txt.gz' 
Content type 'application/x-gzip' length 65933953 bytes (62.9 Mb) 
opened URL 
downloaded 62.9 Mb 

Show Traceback 

Rerun with Debug 
Error in open.connection(file, "rt") : cannot open the connection In addition: Warning message: 
In open.connection(file, "rt") : 
    cannot open zip file 'D:....' 

qui è quello che ho provato:

url_S_C <- "http://cbio.mskcc.org/microrna_data/human_predictions_S_C_aug2010.txt.gz" 
tmpFile <- tempfile() 
fileName <- gsub(".gz","",basename(url_S_C)) 
download.file(url_S_C, tmpFile) 
data <- read.table(unz(tmpFile, fileName)) 
unlink(tmpFile) 

Forse someoe qui mi può aiutare perché questo particolare file non funziona per me? Si noti che questo file è di dimensioni ridotte (62,9 Mb), ma non sono riuscito a riprodurre l'errore con l'URL della domanda simile.

Grazie!

+0

Quale sistema operativo stai utilizzando? – nrussell

+0

3.2.0-4-amd64 # 1 SMP Debian 3.2.60-1 + deb7u3 x86_64 GNU/Linux Descrizione: Debian GNU/Linux 7.6 (wheezy) – MineSweeper

+1

In R, usando 'gzfile (tmpFile)' invece di 'unz (tmpFile, fileName) 'ha funzionato per me. Dato che sei su Linux, presumo che tu abbia le utility a riga di comando 'wget' e' gunzip', quindi puoi anche scaricare e decomprimere il file '.gz' e poi leggerlo in R come qualsiasi altro file' .txt' . – nrussell

risposta

5

alcune opzioni aggiuntive, con base R:

url <- "http://cbio.mskcc.org/microrna_data/human_predictions_S_C_aug2010.txt.gz" 
tmp <- tempfile() 
## 
download.file(url,tmp) 
## 
data <- read.csv(
    gzfile(tmp), 
    sep="\t", 
    header=TRUE, 
    stringsAsFactors=FALSE) 
names(data)[1] <- sub("X\\.","",names(data)[1]) 
## 
R> head(data) 
    mirbase_acc mirna_name gene_id gene_symbol transcript_id ext_transcript_id   mirna_alignment 
1 MIMAT0000062 hsa-let-7a 5270 SERPINE2 uc002vnu.2   NM_006216 uuGAUAUGUUGGAUGAU-GGAGu 
2 MIMAT0000062 hsa-let-7a 494188  FBXO47 uc002hrc.2  NM_001008777 uugaUA-UGUU--GGAUGAUGGAGu 
3 MIMAT0000062 hsa-let-7a 80025  PANK2 uc002wkc.2   NM_153638 uugauaUGUUGG-AUGAUGGAgu 
4 MIMAT0000062 hsa-let-7a 26036  ZNF451 uc003pdp.2   AK027074 uuGAUAUGUUGGAUGAUGGAGu 
5 MIMAT0000062 hsa-let-7a  586  BCAT1 uc001rgd.3   NM_005504 uugaUAUGUUGGAUGAUGGAGu 
6 MIMAT0000062 hsa-let-7a 22903  BTBD3 uc002wnz.2   NM_014962 uuGAUAUGUUGGAU-GAUGG-AGu 
        alignment   gene_alignment mirna_start mirna_end gene_start gene_end 
1  | :|: ||:|| ||| |||| aaCGGUGAAAUCU-CUAGCCUCu   2  21  495  516 
2  || |||: ::||||||||: acaaAUCACAGUUUUUACUACCUUc   2  19  459  483 
3   |::||: ||||||||  aauuucAUGACUGUACUACCUga   3  17   77  99 
4  || || | | |||||||  ccCUCUAGA---UUCUACCUCa   2  21  1282  1300 
5  :|| |: ||||||||  guagGUAAAGGAAACUACCUCa   2  19  6410  6431 
6 || || ||| || ||||| || uaCUUUAAAACAUAUCUACCAUCu   2  21  2265  2288 
       genome_coordinates conservation align_score seed_cat energy mirsvr_score 
1 [hg19:2:224840068-224840089:-]  0.5684   122  0 -14.73  -0.7269 
2 [hg19:17:37092945-37092969:-]  0.6464   140  0 -16.38  -0.1156 
3 [hg19:20:3904018-3904040:+]  0.6522   139  0 -16.04  -0.2066 
4 [hg19:6:56966300-56966318:+]  0.7627   144  7 -14.51  -0.8609 
5 [hg19:12:24964511-24964532:-]  0.6775   150  7 -15.09  -0.2735 
6 [hg19:20:11906579-11906602:+]  0.5740   131  0 -12.59  -0.2540 

O se si si trovano su un sistema simile a Unix, è possibile ottenere il file .txt (all'esterno di R o utilizzando system o system2 dall'interno di R) come questo:

[[email protected] tmp]$ url="http://cbio.mskcc.org/microrna_data/human_predictions_S_C_aug2010.txt.gz" 
[[email protected] tmp]$ wget "$url" && gunzip human_predictions_S_C_aug2010.txt.gz 

e poi procedere come sopra, dove si sta leggendo in human_predictions_S_C_aug2010.txt da dove sono stati giustiziati wget e gunzip,

data <- read.csv(
    "~/tmp/human_predictions_S_C_aug2010.txt", 
    stringsAsFactors=FALSE, 
    header=TRUE, 
    sep="\t") 

nel mio caso.

+1

Perché è necessario separare 'data' e' names' quando è fatto in questo modo? Funziona come dovrebbe ora! – MineSweeper

+1

'read.table' non ha catturato i nomi delle colonne per qualche motivo - grazie per averlo indicato, aggiornerò la mia risposta. – nrussell

+1

'downloadAndDecompress <- Funzione (url) { tmp <- tempfile() download.file (url, tmp, method = 'ricciolo') dati <- read.table (gzfile (tmp), intestazione = TRUE) unlink (tmp) ritorno (dati) } 'Questa funzione funziona per il mio scopo. L'aggiunta di 'method = curl' abilita le connessioni ** https **, se necessario. Vedi pacchetto _RCurl_. Grazie! – MineSweeper

2

È possibile leggere i dati dal file in R seguente modo (testato su Windows):

library(stringr) 
library(plyr) 
library(dplyr) 

# download and extract file from web 

temp <- tempfile() 
download.file("http://cbio.mskcc.org/microrna_data/human_predictions_S_C_aug2010.txt.gz", temp) 
gzfile(temp, 'rt') 
data <- read.csv(temp, 
       stringsAsFactors = FALSE, 
       nrows = 20) 
unlink(temp) 

# column names 

my_names <- 
    str_split(names(data), "\\.") %>% 
    unlist(.) 

# toy example using only first 6 rows of dataset 

mickey_mouse_data <- 
    head(data) %>% 
    unlist(.) %>% 
    str_split(., "\t") %>% 
    ldply(.) 

names(mickey_mouse_data) <- my_names[-1] 

tbl_df(mickey_mouse_data) 

    mirbase_acc mirna_name gene_id gene_symbol transcript_id ext_transcript_id 
1 MIMAT0000062 hsa-let-7a 5270 SERPINE2 uc002vnu.2   NM_006216 
2 MIMAT0000062 hsa-let-7a 494188  FBXO47 uc002hrc.2  NM_001008777 
3 MIMAT0000062 hsa-let-7a 80025  PANK2 uc002wkc.2   NM_153638 
4 MIMAT0000062 hsa-let-7a 26036  ZNF451 uc003pdp.2   AK027074 
5 MIMAT0000062 hsa-let-7a  586  BCAT1 uc001rgd.3   NM_005504 
6 MIMAT0000062 hsa-let-7a 22903  BTBD3 uc002wnz.2   NM_014962 
Variables not shown: mirna_alignment (chr), alignment (chr), gene_alignment (chr), 
    mirna_start (chr), mirna_end (chr), gene_start (chr), gene_end (chr), 
    genome_coordinates (chr), conservation (chr), align_score (chr), seed_cat (chr), energy 
    (chr), mirsvr_score (chr) 
+2

Questo è un buon approccio per la lettura in un file di testo, ma penso che il problema principale dell'OP fosse quello di estrarre il file '.txt' sottostante dal suo formato' .gz', quindi potresti indirizzare questo nella tua risposta? – nrussell

+0

In secondo luogo, il modo di leggerlo è davvero buono! – MineSweeper