假设你有一个 data frame 叫 x,其中有一个栏叫 id。因此,
myURL <- paste("http://www.ncbi.nlm.nih.gov/gene/", x$id, sep="")
就是所有要去拿取的完整网址。
以下一个为你设计的 function 先喂 R 吃下去。
它可以一次拿取一个网页里你要的资料。
myfunc <- function(myURL){
con <- url(myURL)
txt <- scan(con, what="character")
close(con)
txt1 <- paste(txt, sep="", collapse=" ")
pattern <- "<dt>Summary</dt> <dd>[[:print:]]+</dd>"
re <- regexpr(pattern, txt1)
start <- re[1]
end <- start[1] + attr(regexpr(pattern, txt1),"match.length") - 1
return(substr(txt1, start + 22, end - 5))
}
再试试看
myfunc("http://www.ncbi.nlm.nih.gov/gene/2597")
的结果是不是你要的。有需要的话自己修一下。
可以的话,就用循环把 myURL 一个一个丢给 myfunc()
results <- list()
for(i in 1:length(myURL)){
results[[i]] <- myfunc(myURL[i])
}
这样应该就好了。
: 各位好
: 我需要下载数百个基因的资料
: 网址的格式是:
: http://www.ncbi.nlm.nih.gov/gene/XXXX
: 其中XXXX是这些基因的ID(可能是四个数字或更多)
: 比如GAPDH ID是2597
: 那连结就是:http://www.ncbi.nlm.nih.gov/gene/2597
: 如果我的data frame中有一个column是这些IDs
: 我应该如何写出简单的R scripts来撷取这些网页中的"Summary"中的叙述
: 并加到原本data.frame中相对应rows 形成一个新的column (不包括"Summary"这字本身)
: 例如对GAPDH而言就是
: "This gene encodes ... variants. [provided by RefSeq, Jan 2014]"
: 我想应该是用Rcurl跟grep
: 但因为完全外行
: 不知道如何逐个ID数值加到Rcurl网址的最后
: 再将下载的网页以grep搜寻到的strings加到对应的rows里
: 这样的问题很不专业
: 如果有任何的提示都欢迎
: 谢谢各位专家
: [程式范例]:
: [关键字]: R 网页下载 部分撷取