使用R语言中的正则表达式下载文件

时间:2015-03-10 22:14:26

标签: regex r

R中是否有一个包或函数可以下载文件并支持像linux中的wget这样的正则表达式?

我只想从GEO下载一些cel文件。但有些文件以cel.gz结尾,其他文件以CEL.gz结尾。我所拥有的是GSM ID,例如GSM107523。我想要一个功能可以下载名为GSM107523.cel.gz或GSM107523.CEL.gz的文件。通常,我使用download.file下载文件。

例如: ftp://ftp.ncbi.nlm.nih.gov/geo/samples/GSM107nnn/GSM107523/suppl/GSM107523.cel.gz ftp://ftp.ncbi.nlm.nih.gov/geo/samples/GSM153nnn/GSM153499/suppl/GSM153499.CEL.gz

2 个答案:

答案 0 :(得分:0)

是的,你可以使用grepl。给定一个字符串向量,如果字符串与正则表达式匹配则返回TRUE,否则返回FALSE。

vector_strings <- c("a.cel.gz", "a.CEL.gz", "a.txt")
grepl("[cel|CEL].gz$", vector_strings)

答案 1 :(得分:0)

在对http://www.ncbi.nlm.nih.gov/进行一些窥探之后,我得出的结论是,通过http下载文件会快得多。这就是我想出来的。

对于给定getGSMFile()中的所有字符串,

x将返回文件路径或下载文件。您可以使用download设置该选项。如果您设置http = FALSE,则会尝试下载ftp。但请记住,这次尝试失败了。

getGSMFile <- function (x, download = TRUE, http = TRUE, destfile, ...) 
{
    urlRoot <- "http://www.ncbi.nlm.nih.gov"
    query <- sprintf("/geo/query/acc.cgi?acc=%s&targ=self&view=full&form=html", 
        x)
    fullPath <- paste0(urlRoot, query)
    linkList <- vapply(fullPath, function(x) {
        links <- getHTMLLinks(x, 
            xpQuery = "//a/@href[contains(., 'cel') or contains(., 'CEL')]")
       ftp <- grepl("ftp", links, fixed = TRUE)
       URLdecode(if(http) paste0(urlRoot, links[!ftp]) else links[ftp])
    }, character(1L), USE.NAMES = FALSE)
    if (!download) return(linkList)
    for (link in linkList) download.file(link, destfile = destfile, ...)
}

以下是您的两个GSM上的测试

x <- c("GSM107523", "GSM153499")
getGSMFile(x, download = FALSE)
# [1] "http://www.ncbi.nlm.nih.gov/geo/download/?acc=GSM107523&format=file&file=GSM107523.cel.gz"
# [2] "http://www.ncbi.nlm.nih.gov/geo/download/?acc=GSM153499&format=file&file=GSM153499.CEL.gz"

tmp <- tempfile()
getGSMFile(x, destfile = tmp)
# trying URL 'http://www.ncbi.nlm.nih.gov/geo/download/?acc=GSM107523&format=file&file=GSM107523.cel.gz'
# Content type 'application/octet-stream' length 3960200 bytes (3.8 Mb)
# opened URL
# ==================================================
#     downloaded 3.8 Mb
# 
# trying URL 'http://www.ncbi.nlm.nih.gov/geo/download/?acc=GSM153499&format=file&file=GSM153499.CEL.gz'
# Content type 'application/octet-stream' length 3208938 bytes (3.1 Mb)
# opened URL
# ==================================================
#     downloaded 3.1 Mb