本楼主偶然发现本地电脑无法正常下载更新 R 包了,但是换同事电脑一试是正常的。于是我下载了最新的 R 4.2.2,直接在 R 里面选择镜像或者下载 R 包也是都不行。报的错如下,都是说无法打开链接,但实际上我用 Edge 浏览器(版本 106.0.1370.47 (正式版本) (64 位))都可以正常打开。这说明我可以正常访问那些镜像网站,也可以手动选择下载包,但是无法通过 R 下载包了。

不管选择国内哪个镜像一定报错

> chooseCRANmirror()
Warning: failed to download mirrors file (无法打开URL'https://cran.r-project.org/CRAN_mirrors.csv'); using local file 'D:/D/R/R-4.2.2/doc/CRAN_mirrors.csv'
Warning message:
In download.file(url, destfile = f, quiet = TRUE) :
  URL 'https://cran.r-project.org/CRAN_mirrors.csv': Timeout of 60 seconds was reached

不管下载哪个包一定报错

> install.packages("markdown")
Warning: 无法在貯藏處https://mirrors.bfsu.edu.cn/CRAN/src/contrib中读写索引:
  无法打开URL'https://mirrors.bfsu.edu.cn/CRAN/src/contrib/PACKAGES'
Warning: 无法在貯藏處https://mirrors.bfsu.edu.cn/CRAN/bin/windows/contrib/4.2中读写索引:
  无法打开URL'https://mirrors.bfsu.edu.cn/CRAN/bin/windows/contrib/4.2/PACKAGES'
Warning message:
package ‘markdown’ is not available for this version of R

A version of this package for your version of R might be available elsewhere,
see the ideas at
https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages 

翻了一些别人遇到类似的问题,如https://stackoverflow.com/questions/33355444/r-when-trying-to-install-package-internetopenurl-failed还有https://stackoverflow.com/questions/25599943/unable-to-install-packages-in-latest-version-of-rstudio-and-r-version-3-1-1,里面提到设置options(download.file.method="libcurl")或者设置取消"Tools -> Global Options -> Packages -> "Use Internet Explorer library/proxy for HTTP",试了都不行。另,可能是我本身没琢磨出来这是个什么问题,所以没有用正确的关键词搜到我想要的答案吧。

    Cloud2016 试过,好几天了都还是报一样的错。倒是不影响我用 R,因为还可以手动下载更新 R 包,就是麻烦。

    或许可以试试配置文件

    local({
        r <- getOption("repos")
        r["CRAN"] <- "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"
        options(repos = r)
    })

      yuanfan 先看是 CRAN 镜像不能下载还是任意文件都不能下载吧,试试别的任意网址,如:

      download.file('https://yuanfan.rbind.io/index.html', tempfile())

      如果别的网址都可以下载,那么可能只是 CRAN 镜像不能访问或太慢。如果只是太慢的问题,可以给它多一点时间,比如十分钟:

      options(timeout = 600)

      如果根本就不能访问,那我就不知道是什么问题了(按楼上 chuxinyuan 说的换个镜像试试)。电脑的网络连接用了代理?

      是电脑网络可以正常地访问镜像或者别的网址,但是无法通过 R 访问或下载。不是网速慢的原因,改成600也一样。换个镜像也不行,我直接照着 @chuxinyuan 给的改了 etc 文件夹下面的 Rprofiel.site,还是报错。

      > options(timeout = 600)
      > download.file('https://yuanfan.rbind.io/index.html', tempfile())
      试开URL’https://yuanfan.rbind.io/index.html'
      Error in download.file("https://yuanfan.rbind.io/index.html", tempfile()) : 
        无法打开URL'https://yuanfan.rbind.io/index.html'
      此外: Warning message:
      In download.file("https://yuanfan.rbind.io/index.html", tempfile()) :
        URL 'https://yuanfan.rbind.io/index.html': Timeout of 600 seconds was reached

      我现在用公司的电脑好像都是有代理的,但是用同事的电脑是能正常用 R 下载包的。就没什么别的方法来诊断出问题到底出在哪了么

        无法在貯藏處https://mirrors.bfsu.edu.cn/CRAN/src/contrib中读写索引:

        你的错误信息为啥是简繁体混合的?有没有一点可能跟区域语言设置或者字符编码有关?虽然我没想出有什么因果关系,但就是看见这个觉得奇怪……语言调成英文试试?你的操作系统是啥?各包的版本呢?不如来个 session info 看看吧。

          dapengde 是啊,为撒会在报错的时候蹦出来繁体中文。操作系统和版本信息如下。

          > sessionInfo()
          R version 4.2.2 (2022-10-31 ucrt)
          Platform: x86_64-w64-mingw32/x64 (64-bit)
          Running under: Windows 10 x64 (build 19044)
          
          Matrix products: default
          
          locale:
          [1] LC_COLLATE=Chinese (Simplified)_China.utf8  LC_CTYPE=Chinese (Simplified)_China.utf8    LC_MONETARY=Chinese (Simplified)_China.utf8 LC_NUMERIC=C                                LC_TIME=Chinese (Simplified)_China.utf8    
          
          attached base packages:
          [1] stats     graphics  grDevices utils     datasets  methods   base     
          
          loaded via a namespace (and not attached):
          [1] compiler_4.2.2 tools_4.2.2   

          另,我上网搜了下改语言的方法,把 R-4.2.2/etc/ 下面的 Rconsole 文件这里从language = 改成了language = en。这样重启 R 以后,看到的就都是英文了,报的错也变成英文了,如下。

          > chooseCRANmirror()
          Warning: failed to download mirrors file (cannot open URL 'https://cran.r-project.org/CRAN_mirrors.csv'); using local file 'D:/R/R-4.2.2/doc/CRAN_mirrors.csv'
          Warning message:
          In download.file(url, destfile = f, quiet = TRUE) :
            URL 'https://cran.r-project.org/CRAN_mirrors.csv': Timeout of 60 seconds was reached
          > install.packages("markdown")
          Warning: unable to access index for repository https://mirrors.bfsu.edu.cn/CRAN/src/contrib:
            cannot open URL 'https://mirrors.bfsu.edu.cn/CRAN/src/contrib/PACKAGES'
          Warning: unable to access index for repository https://mirrors.bfsu.edu.cn/CRAN/bin/windows/contrib/4.2:
            cannot open URL 'https://mirrors.bfsu.edu.cn/CRAN/bin/windows/contrib/4.2/PACKAGES'
          Warning message:
          package ‘markdown’ is not available for this version of R
          
          A version of this package for your version of R might be available elsewhere,
          see the ideas at
          https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages 

          yuanfan

          我的电脑不可以,但是同事的可以

          电脑能不能带回去(或者说换个连接的网络)试试看?另外

          浏览器打开可以,R里面下载不可以。而且电脑似乎有代理。

          这让我觉得是否是代理仅对浏览器起了作用,而R中下载是代理并未生效?或者反过来,R中代理生效了,但是浏览器中代理并未生效?

          chuxinyuan

          是不是防火墙阻止了R访问网络?

          有道理,我找找防火墙设置咋弄的。

          这让我觉得是否是代理仅对浏览器起了作用,而R中下载是代理并未生效?或者反过来,R中代理生效了,但是浏览器中代理并未生效?

          哦,也有道理,我也找找 R 中代理是撒,咋设置的。

          另,我在新下载的 R 4.2.2 上面瞎折腾一通后,报出来新的错误。

          > utils:::menuInstallPkgs()
          Warning: unable to access index for repository https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib:
            cannot open URL 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/PACKAGES'
          Error in install.packages(lib = .libPaths()[1L], dependencies = NA, type = type) : 
            argument "pkgs" is missing, with no default
          > utils::install.packages()
          Warning: unable to access index for repository https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib:
            cannot open URL 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/PACKAGES'
          Error in utils::install.packages() : 
            argument "pkgs" is missing, with no default

          设置代理的话参考这个

          大体上应该是R默认会用系统的代理设置,那么就先设置好系统代理的环境变量。另外可以在R中设置

          options(internet.info = 0)

          来查看报错中更多网络相关信息。

          可能你在 R 中的外网流量需要明确设定走代理,特别是在 VPN 环境下。如楼上所说,一般可以通过在 ~/.Renviron 文件中设置 http_proxyhttps_proxy 这两个关键字段实现。具体需要使用什么值可以咨询 IT 部门。

            谢谢大家的帮忙,问题解决了,原来真得是需要在 R 里面单独设置代理。

            这一番折腾的源头是我想用 xfun 里面的 read_all 函数,但是平时没撒事不更新 R 包,xfun 还是0.26版本,于是乎,一更新才发现本帖一楼的问题。现在我随便下了几个 R 包,都能正常下载安装。但是万万没想到,事情的源头,更新 xfun 居然还是报错了,哈哈哈。

            > install.packages("xfun")
            
              有二进制版本的,但源代码版本是后来的:
                 binary source needs_compilation
            xfun   0.36   0.37              TRUE
            
            安装源码包‘xfun’
            
            trying URL 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/xfun_0.37.tar.gz'
            Content type 'application/octet-stream' length 130063 bytes (127 KB)
            downloaded 127 KB
            
            * installing *source* package 'xfun' ...
            ** package 'xfun' successfully unpacked and MD5 sums checked
            ** using staged installation
            ** libs
            gcc  -I"D:/R/R-42~1.0/include" -DNDEBUG     -I"c:/rtools42/x86_64-w64-mingw32.static.posix/include"     -O2 -Wall  -std=gnu99 -mfpmath=sse -msse2 -mstackrealign  -c base64.c -o base64.o
            sh: gcc: command not found
            make: *** [D:/R/R-42~1.0/etc/x64/Makeconf:252: base64.o] Error 127
            ERROR: compilation failed for package 'xfun'
            * removing 'D:/R/R-4.2.0/library/xfun'
            * restoring previous 'D:/R/R-4.2.0/library/xfun'
            Warning in install.packages :
              安装程序包‘xfun’时退出狀態的值不是0

            我手动下载了 xfun_0.37.zip,手动安装也报错。哈哈哈,怎么这么搞笑。但是换成xfun_0.36.zip,就正常了。

            > install.packages("D:/R/xfun_0.37.zip", repos = NULL, type = "win.binary")
            程序包‘xfun’打开成功,MD5和检查也通过
            Error in install.packages : package ‘xfun’ not installed because it is not built for UCRT
            > session_info()
            R version 4.2.0 (2022-04-22 ucrt)
            Platform: x86_64-w64-mingw32/x64 (64-bit)
            Running under: Windows 10 x64 (build 19044), RStudio 2022.12.0.353
            
            Locale:
              LC_COLLATE=Chinese (Simplified)_China.utf8  LC_CTYPE=Chinese (Simplified)_China.utf8    LC_MONETARY=Chinese (Simplified)_China.utf8
              LC_NUMERIC=C                                LC_TIME=Chinese (Simplified)_China.utf8    
            
            Package version:
              compiler_4.2.0  graphics_4.2.0  grDevices_4.2.0 stats_4.2.0     tools_4.2.0     utils_4.2.0     xfun_0.36   

              要是遇到不支持代理的软件,要用透明代理。

                yuanfan 我手动下载了 xfun_0.37.zip,手动安装也报错

                这是因为对应你的 R 版本(r-release)的二进制包还没编出来:https://cran.r-project.org/package=xfun

                Windows binaries: r-devel: xfun_0.37.zip, r-release: xfun_0.36.zip, r-oldrel: xfun_0.37.zip

                只是自用的话,可以从 r-universe.dev 安装开发版本:

                install.packages('xfun', repos = 'https://yihui.r-universe.dev')

                这个预编译服务比 CRAN 快很多,基本上每个小时编一次。CRAN 有时候要等几天才会放出预编译的二进制包。

                不然的话你就需要按 fenguoerbian 说的先安装一大坨 R 兔子。只是为了这么一个包的话,不值得装这个巨型怪兽。

                感觉楼主就像打开了潘多拉盒子,一个小问题召唤出了代理兽和 R 兔子。早知如此,还不如就用我说的 lapply() + readLines() 方案算了。真是折腾白了少年头。所以有时候还是简单粗暴的 Base R 最好用,零依赖、万年稳定。

                  yihui

                  感觉楼主就像打开了潘多拉盒子,一个小问题召唤出了代理兽和 R 兔子。……真是折腾白了少年头。……

                  哈哈,我咋感觉益辉大神是在说,是你把这个盒子递给我的呢。其实是我发现了本帖一楼的问题以后,本来就很想很想弄明白咋回事,也很信很信反正坛子里大佬多,一人出个主意,最后一定能解决的。还好我很想很想,很信很信,哈哈,由于开了本帖还让湘云也顺带解决了一个老问题。另外 @dapengde 还启发了一点,那就是报错了如果按中文搜的话,搜出来的答案有限,改成英文搜能搜出来更多更接近的答案。

                  我没装 R 兔子,因为我装了 xfun0.36了啊,而且很久以前在另一个帖子,益辉大神早就告诉过我可以不用装 R 兔子

                    fenguoerbian

                    windows系统,报错gcc找不到?

                    啊,这个问题,我想了好久。大概因为 gcc 是个编译器,在 Linux 编译需要它,在 Windows 编译撒也会需要它。不知道Linux 和Windows这两种系统最本质的区别是撒呢。但是根据 CyrusYip 叶寻同学的科普,我们装 R 包用源码编译的话可能是:人给软件写函数发指令-->给shell(壳)转换成硬件能接受的指令-->硬件执行,其中 make 并不是 Linux 独有的 shell 命令,应该是所有 shell 通用的命令,所以在windows上面编译的时候,也会在 make 这一步报错。我稍微看了看鸟哥的 Linux 私房菜,原来 grep 也不是 R 的,而是 Linux 也有。还有 cat 也是,Linux 也有,R 也有。我猜 grep cat 应该属于 shell 的范畴,所以通用的这些大家才都有。