【问题标题】:Namespace Circular Reference in RR中的命名空间循环引用
【发布时间】:2021-01-24 22:38:39
【问题描述】:

帮助,我被 R 折磨着。当我尝试加载一个名为 RedTor 的自定义包时。它生成

错误:loadNamespace(i, c(lib.loc, .libPaths()) 中“RedTor”的包或命名空间加载失败, 版本检查 = vI[[i]]): namespace ‘rlang’ 0.4.7 已经加载,但 >= 0.4.9 是必需的

我检查了显而易见的。我安装了 0.4.10 版的 rlang。这不仅仅与 RedTor 有关。 library(dplyr) 生成相同的错误。它更加普遍,似乎是一个命名空间问题。如果我使用 unloadNamespace() 函数

unloadNamespace("rlang")

我明白了

unloadNamespace("rlang") 中的错误: 命名空间‘rlang’由‘ellipsis’、‘testthat’、‘pkgload’、‘pillar’、‘lifecycle’、‘htmltools’、>‘usethis’导入,所以无法卸载

所以我需要卸载那些,但这些可能会反过来生成其他消息。

这似乎与在 R 中加载的内容有关。我运行 sessionInfo() 并注意通过命名空间(而不是附加)加载的内容 - 大约 30-41 个包。希望我知道如何防止这些加载。任何帮助表示赞赏。据我所知,我没有加载 .rdata,也没有加载 .renviron 中的包。

下面是我启动 R 时 sessionInfo() 的结果。它显示 rlang 的 0.4.7 版本正在加载,即使我安装了 0.4.10。我很确定这不仅仅是 rlang,而且 rlang 只是第一个抛出错误的人。这是因为正在通过“过时”的命名空间加载其他包。

R 版本 3.6.3 (2020-02-29) 平台:x86_64-w64-mingw32/x64(64位) 运行于:Windows 10 x64(内部版本 18363)

矩阵产品:默认

语言环境: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C LC_TIME=English_United States.1252

附加的基础包: [1] stats graphics grDevices utils datasets methods base

其他附加包: [1] devtools_2.2.1 使用this_1.6.1

通过命名空间加载(未附加): [1] prettyunits_1.1.1 ps_1.3.0 fansi_0.4.0 rprojroot_1.3-2 withr_2.2.0
摘要_0.6.23蜡笔_1.3.4
[8] assertthat_0.2.1 R6_2.4.1 backports_1.1.5 magrittr_1.5 rlang_0.4.7
cli_2.0.2 遥控器_2.1.1
[15] rstudioapi_0.11 fs_1.4.1 testthat_2.3.2 callr_3.4.3 ellipsis_0.3.0
desc_1.2.0 工具_3.6.3
[22] 胶水_1.4.2 编译器_3.6.3 pkgload_1.0.2 进程x_3.4.1 pkgbuild_1.0.8
sessioninfo_1.1.1 memoise_1.1.0

最后,我什至尝试运行一个脚本来卸载所有命名空间

si <- sessionInfo()
loadednames <- names(si$loadedOnly)
ctr <- 1
n <- length(loadednames)
nold <- n + 1
while (n > 0 & n < nold) {
  cat(n, " ")
  for (i in n:1) {
    try(unloadNamespace(loadednames[i]), silent = TRUE)
  }
  si <- sessionInfo()
  loadednames <- names(si$loadedOnly)
  n <- length(loadednames)  
  ctr <- ctr + 1
  if ( ctr > 100) break
}

这不会卸载所有命名空间。但它让我降到了大约 20。这是运行上述内容后 sessionInfo() 的部分输出。 rlang 仍在列表中:

通过命名空间加载(未附加):
[1] pkgload_1.0.2 R6_2.4.1 rlang_0.4.7 fansi_0.4.0 tools_3.6.3
pkgbuild_1.0.8 sessioninfo_1.1.1 [8] cli_2.0.2 with r_2.2.0 ellipsis_0.3.0 remotes_2.1.1 assertthat_0.2.1
摘要_0.6.23蜡笔_1.3.4
[15] processx_3.4.1 callr_3.4.3 fs_1.4.1 memoise_1.1.0 glue_1.4.2
compiler_3.6.3 prettyunits_1.1.1

所以现在我只是尝试卸载剩余的命名空间,直到我最终可以加载我的 RedTor 包。这是一个曲折的过程,我们将不胜感激。

【问题讨论】:

  • 你有一个 .Rprofile 文件在启动时运行任何代码来加载包吗?您使用的是基本 R GUI 还是使用 RStudio?如果不是正在加载的 rlang 版本,您怎么知道您安装了哪个版本?您是否设置了多个库路径?如果你运行 install.packages("rlang") 会发生什么?
  • 通常update.packages() 可以,最好与最新的 R 版本结合使用。并且:您尝试的包裹来自哪里?
  • 您能否将您的问题标题更改为更清晰、更具体/信息丰富的内容?
  • MrFlick - 我确实有一个加载开发工具的 .rprofile。删除它清除了问题。 install.packages("rlang") 没有帮助,因为我有最新版本。我在 .libPaths 中有 2 个条目,一个指向 Google 驱动器,其想法是我和同事可以使用相同版本的软件包,另一个指向 /Program Files/R/R-3.6.3/图书馆的帽子船长 - 很高兴改变标题。我非常理解更好的标题可以帮助其他人在遇到类似问题时寻求帮助。我还没有 - 命名空间循环引用有效吗?

标签: r namespaces


【解决方案1】:

我认为问题在于我的 .rprofile 中的 require(devtools) 语句。删除似乎已经清除了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2019-08-31
    • 2020-10-11
    • 2020-01-31
    • 2016-12-15
    • 1970-01-01
    相关资源
    最近更新 更多