我如何防止R加载一个包?
我使用R中的多核包来并行化我的代码。 但是,如果加载了tcltk程序包,则使用多核程序包进行分叉处理将导致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"
如果(看起来很可能)加载和附加软件包的行为导致了问题,那么您也可以采取类似于对您的问题的评论中描述的策略。 即:
"C:/R/Library/dummy/"
。 .libPaths(c("C:/R/Library/dummy/", .libPaths()))
将该目录添加到.libPaths
。 然后,如果有任何软件包试图加载tcltk ,它将首先在"C:/R/Library/dummy/"
查找软件包,并找到其中一个名称,将暂时加载它(在它立即被上述钩)。
避免将特定软件包作为依赖项加载的另一种方法是,假设您所需的任何函数都不依赖于该软件包,那么将使用它们的名称空间引用您需要的函数:
lattice::xyplot(1~1)
这样,您不需要使用函数加载包,也不会无意中加载问题包。
链接地址: http://www.djcxy.com/p/58647.html上一篇: How can I prevent R from loading a package?
下一篇: Caching until data changes in ASP.NET MVC & Entity Framework 4.1