SORU
31 AĞUSTOS 2011, ÇARŞAMBA


Karma / memoization / önbelleğe alma seçeneklerini R

Ben bulmaya çalışan basit bir şekilde kullanmak gibi bir şey bu Perl hash fonksiyonları R (aslında önbellekleme), gibi niyetim için de Perl-tarzı karma ve yazmak benim kendi memoisation hesaplamaları. Ancak, diğerleri yumruk beni yenmiş ve memoisation için paketler var. Daha fazla beğendim, daha fazla,*1 ör* ve R.cache ama farklılıkları kolayca açık değil mi buluyorum. Buna ek olarak, bunu daha açık nasıl başka bir can almak Perl-tarzı sağlamalarının (veya Python tarzı sözlükler) ve yazma kendi memoization, dışında kullanmak için hash paketi olan var görünmüyor temelini iki memoization paketleri.

Beri bulabileceğim herhangi bir bilgi, BOZUK ya da başka bir yerde birbirinden seçenekleri, belki de bu olmalı bir topluluk wiki soru: seçenekler Ne için memoization ve önbellekleme R ve ne farklar var?


Karşılaştırma için bir temel olarak, burada bulduğum bir Seçenekler listesi. Ayrıca, tüm karma seçenekleri de not ediyorum karma dayanıyor gibi geliyor bana. Anahtar/değer depolama biraz ilgilidir, ama solucan DB sistemleri ile ilgili büyük bir kutu (örneğin BerkeleyDB, Redis, MemcacheDB ve scores of others) açar.

Seçenek gibi görünüyor:

Karma

  • digest - keyfi R nesneler için karma sağlar.

Memoization

  • memoise - fonksiyonlar memoization için çok basit bir araç.
  • R.cache - daha fazla görünüyor ama işlevi memoization için, fonksiyon eksikliği bazı örnekler sunmaktadır.

Önbelleğe alma

  • hash işlevsellik Perl var sağlamalarının benzer önbellekleme ve Python sözlükler Sağlar.

Anahtar/değer deposu

Bu R nesnelerin harici depolama için temel seçenek vardır.

Denetim

Diğer

  • Temel R destekler: ortamlarda veri çerçeveleri ve ürün isimleri vektörler ve listeler adında, satır ve sütun adları. Bir listesini kullanarak çakma bir bit gibi geliyor bana. (Ama*.* 30) ** 5 var
  • data.table paket veri tablosu elemanların hızlı arama destekler.

Kılıfı kullanın

Seçenekleri bilmek çoğunlukla ilgileniyorum olsa da, ortaya çıkan iki temel kullanım örnekleri var:

  1. Önbellekleme: dizeleri sayma Basit. [Not: Bu NLP için değil ama genel kullanım, NLP kütüphaneler çok abartılı; tablolar dizeleri kümesinin tamamını belleğe yüklenene kadar beklemek istemiyorum çünkü yetersiz. Perl-tarzı sağlamalarının yardımcı doğru seviyede.]
  2. Korkunç hesaplamaları Memoization.

Bu digging in to the profiling of some slooooow code çünkü ben gerçekten ortaya çıkan ve gerçekten basit dizeleri sayısı ve eğer memoization üzerinden bazı hesaplamalar hızlandırmak miyim görmek istiyorum. Eğer bugünkü ileri matematik ve ben bile giriş değerleri karma edememek, eğer memoization yardım et bakalım.


NOT 1: CRAN Task View on Reproducible Research listeleri paketleri bir kaç (cacher R.cache) ama kullanım seçenekleri incelikleri diye bir şey yok.

NOT 2: diğerleri ile ilgili kod arıyorum yardım etmek İçin, burada yazar ya paketlerinden bazıları için birkaç not. Yazarlar bazı kullanma. :)

  • Dirk Eddelbuettel: digest - diğer paketler çok şey buna bağlı.
  • Roger Peng: , *, *11cacherfilehash - Bu farklı şekillerde farklı sorunları çözmek; daha fazla paket için Roger's site bkz.
  • Christopher Brown: hash - yararlı bir paket gibi Görünüyor, ama ODG bağlantıları kesildi, ne yazık ki.
  • Henrik Bengtsson: R.cache & Hadley Wickham: memoise -- henüz bir paket tercih ne zaman belli değil.

NOT 3: Bazı insanlar memoise/memoisation Diğerleri kullanın/memoization bugünkü ileri matematik. Eğer etrafında arıyorsan sadece bir not. Henrik kullanır "z" ve Hadley kullanır "". s

CEVAP
31 AĞUSTOS 2011, ÇARŞAMBA


Dizeleri basit sayma (ve kullanmayan table veya benzeri), multiset veri yapısı iyi bir uyum gibi görünüyor. environment nesne bu taklit etmek için kullanılabilir.

# Define the insert function for a multiset
msetInsert <- function(mset, s) {
    if (exists(s, mset, inherits=FALSE)) {
        mset[[s]] <- mset[[s]]   1L
    } else {
        mset[[s]] <- 1L 
    }
}

# First we generate a bunch of strings
n <- 1e5L  # Total number of strings
nus <- 1e3L  # Number of unique strings
ustrs <- paste("Str", seq_len(nus))

set.seed(42)
strs <- sample(ustrs, n, replace=TRUE)


# Now we use an environment as our multiset    
mset <- new.env(TRUE, emptyenv()) # Ensure hashing is enabled

# ...and insert the strings one by one...
for (s in strs) {
    msetInsert(mset, s)
}

# Now we should have nus unique strings in the multiset    
identical(nus, length(mset))

# And the names should be correct
identical(sort(ustrs), sort(names(as.list(mset))))

# ...And an example of getting the count for a specific string
mset[["Str 3"]] # "Str 3" instance count (97)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008
  • Tube Time

    Tube Time

    14 Mayıs 2013