2012-04-03 19 views
7

Kodumu paralel hale getirmek için çok çekirdekli R paketini kullanıyorum. Ancak, tcltk paketi yüklüyse, çok çekirdekli paketle işlemlerin işlenmesi R'nin süresiz olarak askıda kalmasına neden olur. Bu yüzden, tcltk'in hiç yüklenmemesini önlemek istiyorum. Herhangi bir paket bağımlılık olarak yüklemeye çalışırsa hemen bir hata istiyorum. Mümkün mü?R'nin bir paketi yüklemesini nasıl engelleyebilirim?

Alternatif olarak, yüklendikten sonra boşaltma paketini kaldırabilir miyim?

+0

Paketler sans tcltk ile ayrı bir dizininiz olabilir. R, orada olmayan bir şeyi yükleyemez. –

+0

Ben tcltk yerleşik bir paket olduğuna inanıyorum. Sanırım tcltk desteği olmadan R'yi derleyebilirim, ama bu biraz aşırı görünüyor. –

+0

Ayrıca aşırı (ama belki de tercih edilebilir), aynı zamanda 'tcltk' adlı bir kukla paket oluşturmak ve ayrı dizine yerleştirmek olacaktır. Sonra, libPaths'niz bu dizinde ilk olarak görünecek şekilde ayarlandığında, her zaman taklit paketini yükler. Daha sonra bir paket, 'tcltk': 'setHook (hookName = packageEvent (" tcltk "," onLoad "), value = function (...) duracak şekilde yüklendiğinde hata oluşması için aşağıdakileri de kullanabilirsiniz. ("Uyarı: tcltk yüklemeye çalıştı")) '. (Hataya rağmen paketin hala yükleneceğini unutmayın). Yine de daha temiz bir çözüm olmalı. –

cevap

3

yeterince iyi bir çözüm ekli geçirildikten sonra paket olduğunu ayrılması hemen, o zaman böyle bir şey deneyin:

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"  

yükleme & arasında (muhtemel görünüyor gibi) çok hareket paketini takılarak ise Soruna neden oluyor, sorunuzdaki yorumlarda yer alan gibi bir strateji de takip edebilirsiniz. Yani:

  1. da adlandırılan dizindeki tcltk
  2. Yeri bunu, mesela "C:/R/Library/dummy/" adlı bir zararsız kukla paketi oluşturun.
  3. Başka bir komutu çalıştırmadan önce,numaralı telefonu .libPaths(c("C:/R/Library/dummy/", .libPaths())) gerçekleştirerek bu dizine ekleyin.

Sonra herhangi bir paket tcltk yüklemeye çalıştığında, ilk "C:/R/Library/dummy/" paketler arar ve bu ismin bir bulgu, hemen tarif kanca tarafından müstakil edilmeden önce (bir an için onu yükleyecektir ile elde edilmiş).

1

bir bağımlılık söz konusu pakete bağımlı gerektiren fonksiyonların hiçbiri, kendi ad kullanarak ihtiyacınız işlevleri başvurmak olacağını varsayımına dayanarak, olduğu gibi belirli bir paket yükleme önlemek için başka bir yol:

lattice::xyplot(1~1) 

Bu şekilde, paketi işlevinize yüklemeniz gerekmez ve sorun paketini istemeyerek yüklemezsiniz.

İlgili konular