Если немедленно отсоединение пакета после его установки является достаточно хорошим решением, попробуйте что-то вроде следующего:
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/"
и, найдя одно из этих имен, на мгновение загрузят его (прежде чем он будет немедленно отсоединен описанным выше хуком).