如何防止R加载包?

Rya*_*son 7 r package

我在R中使用多核包来并行化我的代码.但是,如果加载了tcltk软件包,使用多核软件包的分叉进程将导致R无限期挂起.所以我想阻止tcltk加载.如果任何包试图将其作为依赖项加载,我想要立即出错.这可能吗?

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

Jos*_*ien 3

如果在连接包装后立即拆下包装是一个足够好的解决方案,那么请尝试以下操作:

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"     
Run Code Online (Sandbox Code Playgroud)

如果(看起来很可能)加载和附加包的行为本身导致了问题,您也可以采取一种策略,例如在您的问题的评论中概述的策略。即:

  1. 创建一个无害的虚拟包,也命名为tcltk
  2. 将其放置在名为 的目录中"C:/R/Library/dummy/"
  3. 在运行任何其他命令之前,.libPaths通过执行将该目录添加到前面.libPaths(c("C:/R/Library/dummy/", .libPaths()))

然后,如果任何包尝试加载tcltk,它将首先在 中查找包"C:/R/Library/dummy/",并且找到该名称之一,将加载它一段时间(在它立即被上述挂钩分离之前)。