Se immediatamente staccando il pacchetto dopo che è stato attaccato è una buona soluzione abbastanza, quindi provare qualcosa di simile al seguente:
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"
Se (come sembra probabile) l'atto stesso di carico & attaccare il pacchetto sta causando il problema, potresti anche perseguire una strategia come quella schematizzata nei commenti alla tua domanda. Vale a dire:
- creare un pacchetto fittizio innocuo, chiamato anche tcltk
- posto in una directory di nome, per esempio,
"C:/R/Library/dummy/"
.
- Prima di eseguire altri comandi, anteporre quella directory a
.libPaths
eseguendo .libPaths(c("C:/R/Library/dummy/", .libPaths()))
.
Quindi, se qualsiasi pacchetto tenta di caricare tcltk, cercherà prima per i pacchetti in "C:/R/Library/dummy/"
, e, trovando una di quel nome, verrà caricato per un momento (prima che venga immediatamente rimosso dal gancio descritto sopra).
fonte
2012-04-03 19:18:17
Si potrebbe forse avere una directory separata con i pacchetti sans tcltk. R non può caricare qualcosa che non è lì. –
Credo che tcltk sia un pacchetto integrato. Suppongo che potrei compilare R senza supporto tcltk, ma sembra un po 'estremo. –
anche estreme (ma forse preferibile ??) sarebbe quello di creare un pacchetto fittizio, anche chiamata 'tcltk', e posizionarlo nella directory separata. Quindi, finché il tuo 'libPaths' è impostato per cercare prima in quella directory, caricherà sempre il pacchetto fittizio. È quindi possibile anche utilizzare impostare il seguente in modo che un errore viene generato ogni volta che un pacchetto di prova a caricare 'tcltk':' setHook (hookName = packageEvent ("tcltk", "onLoad"), value = function (...) si ferma ("Attenzione: provato a caricare tcltk")) '. (Si noti che il pacchetto verrà comunque caricato, nonostante l'errore). Sembra che ci deve essere una soluzione più pulita, però. –