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
答案 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