你必须查询一个网站10000次我正在寻找一个真正快速的方法来做R
作为模板网址:
url <- "http://mutationassessor.org/?cm=var&var=7,55178574,G,A"
我的代码是:
url <- mydata$mutationassessorurl[1]
rawurl <- readHTMLTable(url)
Mutator <- data.frame(rawurl[[10]])
for(i in 2:27566) {
url <- mydata$mutationassessorurl[i]
rawurl <- readHTMLTable(url)
Mutator <- smartbind(Mutator, data.frame(rawurl[[10]]))
print(i)
}
使用microbenchmark
我有680毫秒的查询时间。我想知道是否有更快的方法来做到这一点!
由于
答案 0 :(得分:7)
加速http连接的一种方法是保持连接打开 请求之间。以下示例显示了它的不同之处 对于httr。第一个选项与默认行为最相似 RCurl。
library(httr)
test_server <- "http://had.co.nz"
# Return times in ms for easier comparison
timed_GET <- function(...) {
req <- GET(...)
round(req$times * 1000)
}
# Create a new handle for every request - no connection sharing
rowMeans(replicate(20,
timed_GET(handle = handle(test_server), path = "index.html")
))
## redirect namelookup connect pretransfer starttransfer
## 0.00 20.65 75.30 75.40 133.20
## total
## 135.05
test_handle <- handle(test_server)
# Re use the same handle for multiple requests
rowMeans(replicate(20,
timed_GET(handle = test_handle, path = "index.html")
))
## redirect namelookup connect pretransfer starttransfer
## 0.00 0.00 2.55 2.55 59.35
## total
## 60.80
# With httr, handles are automatically pooled
rowMeans(replicate(20,
timed_GET(test_server, path = "index.html")
))
## redirect namelookup connect pretransfer starttransfer
## 0.00 0.00 2.55 2.55 57.75
## total
## 59.40
注意namelookup和connect的区别 - 如果你正在共享一个 处理你只需要执行一次这些操作,这样可以节省 很长一段时间。
有很多内部请求变化 - 平均最后两个 方法应该非常相似。