Si inmediatamente separar el paquete después de que se ha unido es una solución lo suficientemente buena, a continuación, intentar algo así como lo siguiente:
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"
Si (como parece probable) el acto mismo de la carga & adjuntando el paquete está causando el problema, también puede seguir una estrategia como la esbozada en los comentarios a su pregunta. A saber:
- Crear un paquete ficticio inofensivo, también llamado tcltk
- colocarlo en un directorio llamado, por ejemplo,
"C:/R/Library/dummy/"
.
- Antes de ejecutar cualquier otro comando, anteceda ese directorio al
.libPaths
ejecutando .libPaths(c("C:/R/Library/dummy/", .libPaths()))
.
Entonces, si cualquier paquete intenta cargar tcltk, primero la búsqueda de paquetes en "C:/R/Library/dummy/"
, y al encontrar una de ese nombre, lo cargará por un momento (antes de que sea inmediatamente separado por el gancho descrito encima).
Quizás podría tener un directorio separado con paquetes sans tcltk. R no puede cargar algo que no está allí. –
Creo que tcltk es un paquete integrado. Supongo que podría compilar R sin soporte tcltk, pero eso parece un poco extremo. –
También extremo (¿pero quizás preferible?) Sería crear un paquete ficticio, también llamado 'tcltk', y colocarlo en el directorio separado. Entonces, siempre que su 'libPaths' esté configurado para buscar primero en ese directorio, siempre cargará el paquete ficticio. También podría usar establecer lo siguiente para que se produzca un error cada vez que un paquete intente cargar 'tcltk':' setHook (hookName = packageEvent ("tcltk", "onLoad"), value = function (...) stop ("Advertencia: intentado cargar tcltk")) '. (Tenga en cuenta que el paquete aún se cargará, a pesar del error). Parece que debe haber una solución más limpia, sin embargo. –