2011-02-06 11 views
17

Eğer Scala içinden R (kütüphaneler) kullanılarak R ve Scala'dan R'yi kullanmak ve Scala'yı R'den çağırmak için?

  • den Scala yürütmesini

    • görüşme imkanlarının hakkında bir şeyler biliyor musunuz?

    Saygılarımızla

    Raffael

  • +0

    Herkese merhaba. Bu durum için özel bir yol belki de bir Restful hizmeti kullanmak olacaktır. Bununla birlikte, R'de yalnızca diğer Restful Hizmetlerine erişmek ve bir Restful Hizmet sunmamak mümkündür. Dolayısıyla, http’un PUT ve DELETE’ini destekleyen bir http paketinin (veya lib dosyasının) gerekli olması gerekir. R Data yapılarını XML'ye serpiştiren bir paket var (hangisini unuttuysanız) bu kolay olurdu. Bir http paketi için herhangi bir işaretçi var mı? Https GET için R.rsp paketini seviyorum, ama PUT ve DELETE için ne kullanmalıyım? Nihai hedef, R ve haskell'i birleştirmek olurdu. – mrsteve

    cevap

    3

    rJava'u kullanabilir ancak bunun en iyi yol olduğuna emin değilim. rJava parçası senin

    1

    JRI Ben Scala öğrenme bu süre yazdım. Artık işe yarayıp yaramadığından emin değilim. JRI ambalajında ​​biraz DSL vardı. Muhtemelen Makros ve arkadaşları şimdi daha iyi yapabilirdi.

    19

    CRAN'da bulunan R içinde jvmr package'a bakın.

    1. Scala
    2. R tercüman gömmek Ayrıca Java ile aynı şeyi yapmaya izin veren R. yılında

    Scala tercüman/derleyici gömmek: Bu size izin verir. Kullanımını açıklayan bir makale here'dur. (Açıklama: Ben yazarım.)

    +0

    Çok yardımcı. Birisi, kafes/kafes grafik/çizime temiz bir Scala adaptörü oluşturmak için bunu kullanmayı çok isterim. JFreeChart, JMathPlot, vb unut, R komplo kazanıyor! – metasim

    +0

    @David: Bu yazı için teşekkürler. Çok yardımcı oldu ve ben R tercüman scala çalışan başarılı elde etmek mümkün oldu ama ben nasıl da bilmek istiyorum gibi (örneğin, tarama, laply..etc) gibi Scala R Fonksiyonu bazı kullanımı nasıl emin değilim plyr ve scala'dan diğer araçlar gibi kütüphaneler ekleyin. Herhangi bir Yardım büyük takdir edilecektir. – Pawan

    +0

    @Pawan Me de, R kütüphaneleri nasıl ekleneceğini bilmek istiyorum.Bir çözüm buldun mu ? –

    4

    Bunu jvmr kullanarak başardım. Aşağıdaki kod, scala konsolundan çalıştırdığım örnek apache kıvılcım uygulamasıdır.

    package org.scala.rtest 
    
    import org.ddahl.jvmr.RInScala 
    
    object RIntegration { 
        def main(args: Array[String]) { 
         val R = RInScala() 
         R>""" 
          require(sparkR) 
    
          score.sentiment = function(sentences, pos.words, neg.words, .progress='none') 
           { 
            require(plyr) 
            require(stringr) 
    
    
            scores = laply(sentences, function(sentence, pos.words, neg.words) { 
    
            # clean up sentences with R's regex-driven global substitute, gsub(): 
    
            sentence = gsub('[[:punct:]]', '', sentence, ignore.case=T) 
    
            sentence = gsub('[[:cntrl:]]', '', sentence, ignore.case=T) 
    
            sentence = gsub('\\d+', '', sentence, ignore.case=T) 
    
            # and convert to lower case: 
    
            sentence = tolower(sentence) 
    
            # split into words. str_split is in the stringr package 
    
            word.list = str_split(sentence, '\\s+') 
    
            # sometimes a list() is one level of hierarchy too much 
    
            words = unlist(word.list) 
    
            # compare our words to the dictionaries of positive & negative terms 
    
            pos.matches = match(words, pos.words) 
            neg.matches = match(words, neg.words) 
    
            # match() returns the position of the matched term or NA 
            # we just want a TRUE/FALSE: 
    
            pos.matches = !is.na(pos.matches) 
    
            neg.matches = !is.na(neg.matches) 
    
            # and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum(): 
    
            score = sum(pos.matches) - sum(neg.matches) 
    
            return(score) 
    
            }, pos.words, neg.words, .progress=.progress) 
            scores.df = data.frame(score=scores, text=sentences) 
            return(scores.df) 
           } 
    
    
         """ 
    
         R(" x <- scan('positive-words.txt',what='character',comment.char=';')") 
         R(" y <- scan('negative-words.txt',what='character',comment.char=';')") 
         R(" z <- scan('twitterstream1.txt', what='character')") 
    
         R.eval("df <- score.sentiment(z,x,y)") 
         println(R.capture("df")) 
    
         } 
    } 
    

    Bu yardımcı olur umarım.

    15

    "Rscala" adı verilen tam olarak bu amaçla CRAN'da bir R paketi var. İki yönlü çağrının (Scala'dan R ve Scala'dan R) yanı sıra geri aramalara (örn. R den Scala kodundan R'ye geri çağrı) izin verir. Bu well documented. Bu paket başka bir cevapta belirtilen "jvmr" paketinin yerini alır.

    +0

    CRAN link: https://cran.r-project.org/web/packages/rscala/ – michael

    İlgili konular