我正在使用 R 中的多核包来并行化我的代码。但是,如果加载了 tcltk 包,则使用多核包分叉进程将导致 R 无限期挂起。所以我想阻止 tcltk 加载。如果任何包尝试将其作为依赖项加载,我希望立即出现错误。这可能吗?
或者,我可以unload加载后的包?
If 立即地在附加包后将其分离是一个足够好的解决方案,然后尝试如下操作:
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/"
,并且找到该名称之一,将加载它一段时间(在它立即被上述挂钩分离之前)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)