2013-02-14 12 views
12

Bir R paketinin önbelleğe alınmış verileri depolayabileceği önceden tanımlanmış bir yer var mı? Veriler oturumlar boyunca devam etmelidir. ${R_LIBS_USER}/package_name'un bir alt dizinini oluşturmayı düşünüyordum, ancak bu paketin taşınabilir olup olmadığını ve paketimin sistem genelinde kurulu olması durumunda "izinli" olup olmadığından emin değilim.Bir paket tarafından veri önbellek olarak kullanılabilecek, her zaman yazılabilir kalıcı bir yer var mı?

fikir aşağıdaki gibidir: (data() belgelerine göre) data(mydata) arayarak yürütülecek olur paketin data alt dizininde bir R komut mydata.R oluşturun. Bu betik, daha önce önbelleğe alınmamışsa, verileri internetten yükler ve önbelleğe yükler. (Veriler önceden önbelleğe alınmışsa, önbellek kullanılır.) Ayrıca, önbelleği geçersiz kılmak ve/veya verilerin daha yeni bir sürümünün çevrimiçi olarak mevcut olup olmadığını kontrol etmek için bir işlev sağlanacaktır.

Halen veri dosyalarının dört biçimleri desteklenir::

Bu data() dokümantasyonlarından olan

  1. dosyalar '.R' biten ya kaynağıdır '.r'() d, R çalışma dizini ile ilgili dosyayı içeren dizine geçici olarak değiştirildi. (Veri utils paketi halinde bu utils :: verileri aracılığıyla çalıştırmak olmuştu ekli olmasını sağlar.)

  2. ... Nitekim

, data alt dizininde bir dosya fortytwo.R oluşturarak aşağıdaki içeriğe sahip bir paketin:

fortytwo = data.frame(answer=42) 

ve data(fortytwo) yürütme bir veri çerçevesi değişken fortytwo oluşturur. Şimdi soru şu ki: fortytwo.R veriyi hesaplamak zor olsaydı ne olurdu?

EDIT: İki paket oluşturmayı düşünüyorum: Verileri sağlayan bir "veri" paketi ve üzerinde çalışan bir "kod" paketi. Soru "veri" paketi ile ilgilidir: Dosyaları, kullanıcı başına depolarda saklayabilir, böylece R oturumları boyunca kalıcı olur ve farklı R projelerinden erişilebilir olur mu?

İlgili: Package that downloads data from the internet during installation.

+2

https://github.com/hadley/rappdirs adresine bir göz atmak isteyebilirsiniz - bu, OS'ye özel bir şekilde doğru dizinleri bulmaya çalışan bir python kitaplığı olan AppDirs'in bir bağlantı noktasıdır. – hadley

+0

Sadece açıklığa kavuşturmaya çalışın: Bir R betiği tarafından işlendikten sonra verilerin nerede saklanabileceğini kastediyor musunuz? Başka bir deyişle, gerçekten veri paketindeki veriler veya gerçekleşen herhangi bir işlemden elde edilen verilerle ilgili sorunuz mu var? İkincisi gibi * sesler. – A5C1D2H2I1M1N2O1R2T1

+0

@hadley: Bu, yakında herhangi bir zamanda CRAN'da görünme şansı var mı? Bunu yapmak için R'ye özgü bir yol yoksa ($ {R_USER_LIBS} alt dizinine koymak gibi), paketinizi memnuniyetle kullanırız. – krlmlr

cevap

-2

Bellek içi veritabanlarına baktınız mı? H2 & Redis, R2 yoluyla RH2 & rredis'te bağlara sahiptir; bu da, verileri, oturum oturumu canlı olana kadar r oturumları arasında paylaşmanıza izin verir. Eşzamanlı olmayan oturumlar boyunca devam etmesini sağlamak için, verilerinizi diske yazmanız gerekir (bu sorunun amacını ortadan kaldıracak şekilde, bunu yeniden oluşturamayacağınız varsayılarak). paket iyi bir seçenek olurdu. Bu şekilde, paketi yüklediğiniz her zaman başlatılan bir güncelleştirme işlevi ekleyebilirsiniz (yani kod paketi doğru bağımlılıklara sahipse)

RWeka & RWekaJars paketleri bir örnektir. Onlara CRAN'a bakın ve onların nasıl çalıştığını anlamak oldukça kolay olmalı.

+0

Verileri diske R'nin yerel formatında yazabilirim. Sadece bir yer bulmaya ihtiyacım var * Nereye koyabiliyorum ki diğer R oturumları orada bulacaktır. – krlmlr

+0

Dediğim gibi, bellek içi veritabanlarını kullanıyorum. H2 & redis bana iyi hizmet ediyor. – jackStinger

1

R'ye paket özel kalıcı önbellekleme için kesinlikle tanımlanmış bir yer yoktur.Ancak, R.cache package, önbelleğe alınmış verileri oluşturmak ve yönetmek için bir arabirim sağlar. Senaryo için yararlı olabilir gibi görünüyor. Kullanıcıların R.cache (library(R.cache)) yüklediğinizde

, bunlar aşağıdaki istemi olsun :

The R.cache package needs to create a directory that will hold cache files. 
It is convenient to use one in the user's home directory, because it remains 
also after restarting R. Do you wish to create the '~/.Rcache/' directory? If 
not, a temporary directory (/tmp/RtmpqdUcbP/.Rcache) that is specific to this 
R session will be used. [Y/n]: 

Daha sonra muhtemelen kalıcıdır ve ev dizinlerine, önbellek dizini oluşturmak için seçebilir veya bir oluşturmak için oturuma özgü dizin. Veri paketinizi R.cache'ye bağlıyorsanız, önbelleğe alınan nesnenin/öğelerin varlığını .onLoad() kanca işlevinde kontrol edebilir ve varsa, verileri karşıdan yükleyebilirsiniz. Alternatif olarak, bunu kendi sorunuzda önerilen şekilde yapabilirsiniz.

İlgili konular