gpt4 book ai didi

r - 如何防止 R 加载包?

转载 作者:行者123 更新时间:2023-12-04 12:35:33 25 4
gpt4 key购买 nike

我正在使用 R 中的多核包来并行化我的代码。但是,如果加载了 tcltk 包,使用 multicore 包的 fork 进程将导致 R 无限期挂起。所以我想防止 tcltk 永远加载。如果任何包尝试将其作为依赖项加载,我希望立即出现错误。这可能吗?

或者,我可以在加载后卸载一个包吗?

最佳答案

如果 立即在附加包后将其分离是一个足够好的解决方案,然后尝试以下操作:

setHook(hookName = packageEvent("tcltk", "attach"),
value = function(...) detach(package:tcltk))

# Try it out
library(tcltk)
# Loading Tcl/Tk interface ... done
# Error in as.environment(pos) : invalid 'pos' argument
search()
# [1] ".GlobalEnv" "package:graphics" "package:grDevices"
# [4] "package:utils" "package:datasets" "package:methods"
# [7] "Autoloads" "package:base"

如果(似乎很可能)加载和附加包裹的行为导致了问题,您也可以采用类似于您问题评论中概述的策略。即:
  • 创建一个无害的虚拟包,也称为 tcltk
  • 将它放在一个名为的目录中,例如 "C:/R/Library/dummy/" .
  • 在运行任何其他命令之前,将该目录添加到 .libPaths通过执行 .libPaths(c("C:/R/Library/dummy/", .libPaths())) .

  • 然后,如果任何包试图加载 tcltk ,它将首先在 "C:/R/Library/dummy/" 中查找包, 并且,找到其中一个名称,将加载它片刻(在它立即被上述钩子(Hook)分离之前)。

    关于r - 如何防止 R 加载包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999201/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com