• R语言
  • Error in library.dynam(lib, package, package.lib) : Without this DLL“xfun”

##问题描述
用BioManager包安装org.eg.Mm.db包失败,提示xfun包为架构安装,但xfun包其实已安装。

##我的代码、数据和运行结果

.libPaths()

[1] "D:/APP/R-4.2.1/library"

library(BiocManager)
BiocManager::install("org.eg.Mm.db")

Error in library.dynam(lib, package, package.lib) : 没有这个DLL ‘xfun’:是不是没有为此架构安装?

library(xfun)

Warning: 程辑包‘xfun’是用R版本4.2.2 来建造的
Error: package or namespace load failed for ‘xfun’ in library.dynam(lib, package, package.lib):
没有这个DLL ‘xfun’:是不是没有为此架构安装?

##我的初步解决方法

在Rstudio界面点击Tools>Check for Package Upates>Select All>Install Updates

反馈:
无法将拆除原来安装的程序包‘digest’
Warning in install.packages :
problem copying D:\APP\R-4.2.1\library\00LOCK\digest\demo\vectorised.R to D:\APP\R-4.2.1\library\digest\demo\vectorised.R: Permission denied
下载的二进制程序包在
C:\Users\86157\AppData\Local\Temp\RtmpEzy9GL\downloaded_packages里

##我的系统环境

SessionInfo()

*R version 4.2.1 (2022-06-23 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
[2] LC_CTYPE=Chinese (Simplified)
China.utf8
[3] LC_MONETARY=Chinese (Simplified)China.utf8
[4] LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)
China.utf8

attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base

loaded via a namespace (and not attached):
[1] evaluate_0.19 data.table_1.14.6 tools_4.2.1
[4] compiler_4.2.1 BiocManager_1.30.19*

    zkl 按理说应该不用这么麻烦的啊。首先 BiocManager 不依赖 xfun,我不知道它为啥要加载 xfun;其次,如果从源码能安装的话,那预编译的包应该也能装。唯一的可能就是你的 CRAN 镜像没有同步 xfun 的预编译二进制版本,检查一下 getOption('repos')。这个可能性应该也不大,RStudio 默认用自己厂的镜像,同步是极快的。

    另外,Windows 下安装 R 包有个坑爹的地方,就是你无法重新安装已加载的含有 dll 的包(digest 和 xfun 都是这一类),而必须重启 R 甚至关掉其它正在使用这些包的项目,在一个干净的环境中安装包。

    • zkl 回复了此帖

      yihui 对,这实在是麻烦。
      我检查了一下getOption('repos'),它反馈:

      CRAN
      "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"
      attr(,"RStudio")
      [1] TRUE

      后面我重新安装了xfun,但后续又出现一个接一个的这样的报错:Error in library.dynam(lib, package, package.lib) :
      DLL 'R包名' not found: maybe not installed for this architecture?
      我就只能一个一个地重新安装这些明明已经安装好的包/(ㄒoㄒ)/~,好费时间哇,到现在也没能把包穷尽可我实在是不清楚哪里出问题了(T_T)

        zkl 太奇怪了。看看以下信息:

        .Platform
        list.files(system.file('libs', package = 'xfun'), recursive = TRUE)

        另外你的 R 不是最新版本,不过既然已经是 4.2.x 应该也没啥影响。

        • zkl 回复了此帖

          yihui 我运行了一下这两行代码:

          .Platform

          $OS.type
          [1] "windows"

          $file.sep
          [1] "/"

          $dynlib.ext
          [1] ".dll"

          $GUI
          [1] "RStudio"

          $endian
          [1] "little"

          $pkgType
          [1] "win.binary"

          $path.sep
          [1] ";"

          $r_arch
          [1] "x64"

          list.files(system.file('libs', package = 'xfun'), recursive = TRUE)

          [1] "x64/symbols.rds" "x64/xfun.dll"

          看上去好像没什么问题。
          我几天前把包的安装路径和加载路径统一成一个路径了,现在包安装路径是这个:

          .libPaths()

          [1] "D:/APP/R-4.2.1/library"

          后来又安装了Rtools

          我不知道这会不会有影响,比如r包安装目录权限方面的问题,导致rstudio无法识别某些DLL“R包”。
          今天我重新安装AnnotationDbi

          install.packages("D:/R_packages/AnnotationDbi",repos=NULL, type="source",denpendencies=T)

          Error: package or namespace load failed for ‘AnnotationDbi’:
          loadNamespace()里算'zlibbioc'时.onLoad失败了,详细内容:
          调用: inDL(x, as.logical(local), as.logical(now), ...)
          错误: unable to load shared object 'D:/APP/R-4.2.1/library/zlibbioc/libs/x64/zlib1bioc.dll':
          LoadLibrary failure: 找不到指定的模块。

          library(zlibbioc)

          Error: package or namespace load failed for ‘zlibbioc’:
          loadNamespace()里算'zlibbioc'时.onLoad失败了,详细内容:
          调用: inDL(x, as.logical(local), as.logical(now), ...)
          错误: unable to load shared object 'D:/APP/R-4.2.1/library/zlibbioc/libs/x64/zlib1bioc.dll':
          LoadLibrary failure: 找不到指定的模块。

          if (!require("BiocManager", quietly = TRUE))
              install.packages("BiocManager")
          BiocManager::install("zlibbioc",force = TRUE)

          安装成功
          这次我没有用install.packages("D:/R_packages/AnnotationDbi",repos=NULL, type="source",denpendencies=T)
          所以也没有出现这种报错:

          Error in library.dynam(lib, package, package.lib) :
          DLL 'XVector' not found: maybe not installed for this architecture?

          但有另一种报错/(ㄒoㄒ)/~

          if (!require("BiocManager", quietly = TRUE))
              install.packages("BiocManager")
          BiocManager::install("AnnotationDbi",force = TRUE)

          Warning messages:
          1: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[]) :
          package ‘stringi’ has no 'package.rds' in Meta/
          2: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[]) :
          package ‘stringi’ has no 'package.rds' in Meta/
          'getOption("repos")' replaces Bioconductor standard
          repositories, see '?repositories' for details
          replacement repositories:
          CRAN: https://mirrors.sustech.edu.cn/CRAN/
          Warning: URL 'https://mirrors.sustech.edu.cn/CRAN/src/contrib/PACKAGES.rds': status was 'Failure when receiving data from the peer'