Nếu ngay tách các gói sau khi nó được gắn liền là một giải pháp tốt, đủ, sau đó thử một cái gì đó như sau:
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"
Nếu (như dường như có khả năng) chính động thái của tải & gắn các gói đang gây ra vấn đề, bạn cũng có thể theo đuổi một chiến lược như chiến lược được phác thảo trong các nhận xét cho câu hỏi của bạn. Cụ thể:
- Tạo một gói giả vô hại, cũng tên là tcltk
- Nơi nó trong một thư mục có tên, ví dụ,
"C:/R/Library/dummy/"
.
- Trước khi chạy bất kỳ lệnh nào khác, hãy thêm thư mục đó vào
.libPaths
bằng cách thực hiện .libPaths(c("C:/R/Library/dummy/", .libPaths()))
.
Sau đó, nếu bất kỳ gói cố gắng để tải tcltk, nó sẽ lần đầu tiên tìm kiếm gói trong "C:/R/Library/dummy/"
, và, việc tìm kiếm một trong những cái tên đó, sẽ tải nó cho một thời điểm (trước khi nó ngay lập tức tách ra bằng cách móc mô tả ở trên).
Nguồn
2012-04-03 19:18:17
Bạn có thể có một thư mục riêng với gói sans tcltk. R không thể tải thứ gì đó không có ở đó. –
Tôi tin tcltk là một gói dựng sẵn. Tôi cho rằng tôi có thể biên dịch R mà không hỗ trợ tcltk, nhưng điều đó có vẻ hơi khắc nghiệt. –
Cũng cực đoan (nhưng có lẽ thích hợp hơn ??) sẽ là tạo một gói giả, còn được đặt tên là 'tcltk' và đặt nó vào thư mục riêng biệt. Sau đó, miễn là 'libPaths' của bạn được đặt để trông đầu tiên trong thư mục đó, nó sẽ luôn tải gói giả. Sau đó bạn có thể sử dụng thiết lập như sau để một lỗi được ném bất cứ khi nào một gói cố tải 'tcltk':' setHook (hookName = packageEvent ("tcltk", "onLoad"), value = function (...) stop ("Cảnh báo: cố gắng tải tcltk")) '. (Lưu ý rằng gói sẽ vẫn được tải, mặc dù lỗi). Có vẻ như phải có một giải pháp sạch hơn. –