[英]How can I prevent R from loading a package?
我在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)
這樣,您不需要使用您的函數加載包,也不會無意中加載問題包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.