首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本R(或CRAN)功能,运行互联网速度测试从R?

基本R(或CRAN)功能,运行互联网速度测试从R?
EN

Stack Overflow用户
提问于 2019-08-29 15:25:56
回答 1查看 258关注 0票数 2

基R(或CRAN上的包)中是否有运行速度测试(即测量用户下载速度)的函数?

注意:我不想要依赖于CRAN之外的库、外部脚本或任何在基本R/CRAN之外的软件,而不是已经在标准操作系统(即linux、mac和windows)上的软件。

接近的方法

非脆包装

github上有一个返回用户下载速度的包(不是CRAN)

代码语言:javascript
复制
install_github("https://github.com/hrbrmstr/speedtest")
library(speedtest)
speedtest::spd_download_test(speedtest::spd_best_servers())$mean
# [1] 12.9

Python脚本

可以通过对curl的系统调用获得下载速度,从github检索python脚本,然后执行该脚本。例如system("curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -")

这很好,因为它可以用一行代码在R中完成。但是,这是有问题的,因为它依赖于安装python,以及( b)从github (危险)检索代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-31 00:08:57

正如我们在注释中讨论的那样,您可以下载文件的第一个n字节,对其进行计时,然后从那里进行计算。

虽然不是基本的-R,但它只使用httr包,这是很常见的--我认为够了。您可能能够适应download.file,尽管我很难让headers=做我在这里需要做的事情。

这是一个过度设计的助手脚本:

代码语言:javascript
复制
dl_size <- function(url) {
  tryCatch(
    as.integer(httr::HEAD(url)$headers$`content-length`),
    error = function(e) NA_integer_)
}
dl_speedtest <- function(url, size = 10000, tries = 1) {
  urlsize <- dl_size(url)
  stopifnot(isTRUE(!is.na(urlsize)))
  starts <- size * seq_len(tries)
  tries <- min(tries, floor(urlsize / size))
  counts <- sapply(
    paste(c(0, starts[-tries]), starts-1, sep = "-"),
    function(byt) {
      system.time(ign <- httr::GET(url, httr::add_headers(Range = paste0("bytes=", byt))))
    })
  browser()
  if (tries < 3) {
    elapsed <- counts["elapsed",]
    speeds <- sort(size / counts["elapsed",])
  } else {
    elapsed <- summary(counts["elapsed",])
    speeds <- summary(size / counts["elapsed",])
    expected <- summary(urlsize / (size / counts["elapsed",]))
  }
  list(elapsed = elapsed, speeds = speeds, expected = expected)
}

为了进行测试,我在一个个人网站上设置了一个50MiB“随机”文件。因为我宁愿用随机流量来证明这个站点,所以我只需要在这里使用URL

在行动中:

代码语言:javascript
复制
dl_speedtest(URL, size=100000, tries=3)
# $elapsed
# [1] 0.20 0.11 0.09
# $speeds
# [1]  500000.0  909090.9 1111111.1
# $expected
# [1] 102.40  56.32  46.08

dl_speedtest(URL, size=100000, tries=5)
# $elapsed
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   0.080   0.090   0.090   0.094   0.100   0.110 
# $speeds
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#  909091 1000000 1111111 1076263 1111111 1250000 
# $expected
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   40.96   46.08   46.08   48.13   51.20   56.32 

就像我说的,设计过度了,但我在玩它。您可以/应该对代码进行相当大的缩减。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57713381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档