无法使用 devtools 安装 R github 包(curl 超时错误)

unable to install R github packages with devtools (curl Timeout error)

我目前无法使用 devtools 安装 R github 包。无论我尝试安装哪个 github 包,我都会得到同样的错误。这是一个例子。

devtools::install_github("clauswilke/ggtextures")

Error in curl::curl_fetch_memory(url, handle = h) : Timeout was reached: Resolving timed out after 10000 milliseconds

这是 R 还是我本地家庭 WiFi 的问题?尽管我能够 post 并观看 YouTube 视频,但本地家庭 WiFi 一直表现得很奇怪。如果我输入一个新的网站地址 Chrome 有时需要 5-10 秒才会出现该网站。从那时起,它的速度非常快。奇怪。

这听起来像是 DNS 问题?也许?还有别的吗?我从哪里开始?

[编辑] 我正在尝试@hrbrmstr 建议,如下所示。那么我是否需要更改为 OpenDNS 来解决这个问题?如果那是最好的解决方案,我会报告。感谢您的帮助,我认为它将对一些人进行更多 R 工具方面的教育。我的明确赞成票。

OS = Ubuntu 18.04

# docall(...)
                        host user.self sys.self elapsed user.child sys.child          result
2                 github.com     0.004    0.004  15.007          0         0  192.30.253.112
21         whosebug.com     0.003    0.000   5.005          0         0  151.101.193.69
3                 google.com     0.000    0.000   0.040          0         0   172.217.15.78
4                  yahoo.com     0.001    0.000   0.040          0         0     72.30.35.10
5  www.this-wont-resolve.com     0.003    0.001   0.267          0         0           Error
6                  cisco.com     0.001    0.000   0.041          0         0    72.163.4.185
7          bankofamerica.com     0.002    0.000   5.005          0         0 171.159.228.150
8                  apple.com     0.000    0.003   5.005          0         0   17.142.160.59
9              microsoft.com     0.001    0.001   5.003          0         0      40.76.4.15
10              curl.haxx.se     0.001    0.000   0.061          0         0  151.101.250.49

.

# pingr::ping(...)
ping: bad linger time.
                  [,1] [,2] [,3]
github.com          NA   NA   NA
whosebug.com   NA   NA   NA
google.com          NA   NA   NA
yahoo.com           NA   NA   NA
cisco.com           NA   NA   NA
time.apple.com      NA   NA   NA

.

# install.packages("speedtest")
Warning in install.packages :
  package ‘speedtest’ is not available (for R version 3.5.1)

(这不会解决你的问题,所以从技术上讲它不是一个答案,但评论也太长了......所以学究们可以随意投反对票)

虽然 SO 不是互联网连接技术支持论坛,但我们可以为您提供一些 R 工具来对您的连接进行分类。

我知道安装了 curl 软件包,因为您正在尝试使用 devtools 所以试一试:

do.call(
  rbind.data.frame,
  lapply(
    c(
      "github.com", "whosebug.com", "google.com", "yahoo.com",
      "www.this-wont-resolve.com", "cisco.com", "bankofamerica.com",
      "apple.com", "microsoft.com", "curl.haxx.se"
    ), 
    function(x) {
      clock <- system.time(res <- try(curl::nslookup(x), silent = TRUE), gcFirst = FALSE)
      clock <- as.list(clock)
      clock <- c(host = x, clock, result = if (inherits(res, "character")) res else "Error")
      clock
    }
  )
)

在我的系统上 ^^ 产生:

##                         host user.self sys.self elapsed user.child sys.child          result
## 2                 github.com     0.000    0.000   0.001          0         0  192.30.253.113
## 21         whosebug.com     0.001    0.000   0.001          0         0   151.101.65.69
## 3                 google.com     0.000    0.000   0.001          0         0  172.217.10.142
## 4                  yahoo.com     0.000    0.001   0.001          0         0      72.30.35.9
## 5  www.this-wont-resolve.com     0.071    0.002   0.073          0         0           Error
## 6                  cisco.com     0.000    0.000   0.001          0         0    72.163.4.185
## 7          bankofamerica.com     0.001    0.000   0.000          0         0 171.159.228.150
## 8                  apple.com     0.000    0.001   0.001          0         0   17.142.160.59
## 9              microsoft.com     0.001    0.000   0.001          0         0  40.113.200.201
## 10              curl.haxx.se     0.000    0.000   0.001          0         0  151.101.118.49

它正在做的是使用操作系统的解析器库按照 curl 的方式进行 DNS 查找(因此 httr/rvestdevtools 网络基于安装程序)。您可以获得计时并查看是否有错误。在提供的列表中有一个故意的主机无法解析。欢迎补充。

这应该可以让您大致了解解决问题是否存在问题。

如果您安装了 pingr,您可以:

t(sapply(
  c(
    "github.com", "whosebug.com", "google.com", 
    "yahoo.com", "cisco.com", "time.apple.com"
  ),
  function(x) {
    res <- try(pingr::ping(destination = x, count = 3, timeout = 5))
  }
))

在我的系统上,returns:

##                      [,1]   [,2]   [,3]
## github.com         30.095 23.964 31.652
## whosebug.com  16.524 13.529 20.790
## google.com         30.743 22.004 22.333
## yahoo.com          34.450 33.070 40.198
## cisco.com          67.215 74.290 96.568
## time.apple.com    110.832 88.482 87.582

这应该让您基本了解互联网的基本网络操作进展情况。超高的值不好。

如果您安装了 speedtest,您可以:

speedtest::spd_test()

从 R 控制台或:

Rscript -e 'speedtest::spd_test()'

来自 command-line/terminal 提示,它会给你这样的输出:

## Gathering test configuration information...
## Gathering server list...
## Determining best server...
## Initiating test from Comcast Cable (###.###.###.###) to Otelco (Portland, ME)
## 
## Analyzing download speed..........
## Download: 166 Mbit/s
## 
## Analyzing upload speed......
## Upload: 7 Mbit/s

(是的,缅因州农村的互联网很糟糕)

稍后我可以 post 一些更多的疑难解答信息。了解您使用的 OS 会有所帮助。

注意:您所描述的某些行为表明存在大量劫持系统 DNS 的恶意软件(这是我试图提供帮助的另一个原因)。