在公司,下述代码可以运行

library(xml2) # read_html
# 抓取维基百科页面数据
us_states <- read_html("https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States_by_population_density")

回到家,就会报错

Error in open.connection(x, "rb") : 
  Timeout was reached: [en.wikipedia.org] Connection timed out after 10001 milliseconds

我想是网络环境的问题,疑惑的是在家(挂了代理后)和在公司都能打开这个维基百科页面,为什么下载不了?

    Cloud2016 这可能要看代理是怎么挂的吧,也许 xml2 没有用到你的代理。我只知道基础 R 包里可以通过环境变量设置代理,参见 ?download.file 里的 Setting Proxies 一节,但它对你这个情况可能也不适用。你可以先试试普通下载是否能成功:

    xfun::download_file("https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States_by_population_density", "test.html")

    如果这个可以,那么你就下载之后再读它就好了。如果这也不能下载的话,那我就不知道了。

      4 天 后

      yihui 也不能下载,不过没关系,我已经在公司网络下载了。

      1 年 后

      yihui 问题终于解决了,谢谢 @nan.xiao 。需要设置代理,我当时以为开了蓝灯就行,其实还需要配置 R 软件代理,所以在 ~/.Renviron 添加如下一行就可以了,具体网址端口可以在蓝灯的高级设置里找到。

      https_proxy=127.0.0.1:49370

      这就是告诉 R 给我走代理流量。不然,开了蓝灯,R 软件也不会去用的。

        Cloud2016 嗯,其实当时我跟你说了可以设置环境变量,但可能没说得很仔细(而且我对蓝灯也不熟悉):

        yihui 我只知道基础 R 包里可以通过环境变量设置代理,参见 ?download.file 里的 Setting Proxies 一节

          yihui 嗯嗯,我当时没看到具体的做法,帮助文档看了,还是不知道怎么动手,因为它没讲清楚怎么设置,而我想当然的以为开了蓝灯不就是等于设置了代理了吗 😄。BTW,这些下载文件,抓网页的包和函数都是支持代理设置的。比如 xml2 、rvest 等