2014-06-21 23 views
8

Bash'ten ve RStudio içinden aynı komut dosyasını çalıştıran bazı beklenmedik davranışlarım var.RStudio, tüm Python modüllerini rPython çağrısı ile yüklemiyor

Lütfen aşağıdakileri dikkate alın.

# test1.R 

library(rPython) 

setwd("~/rpython") 

python.load("test1.py") 

number <- python.get("number") 
string <- python.get("string") 

print(sqrt(number)) 
print(string) 

ve

# test1.py 

import random, nltk 

number = random.randint(1, 1000) 

string = nltk.word_tokenize('home sweet home') 

Ben

>> Loading required package: RJSONIO 
>> [1] 13.0384 
>> [1] "home" "sweet" "home" 

beklendiği gibi döner ve Ararsam hangi Rscript test1.R ile Bash benim R komut arayabilir: Ben "~/rpython" iki komut dosyalarını içeren bir klasör var tekrar farklı bir rasgele sayı üretecektir

>> Loading required package: RJSONIO 
>> [1] 7.211103 
>> [1] "home" "sweet" "home" 

Fakat aynı senaryoyu (test1.R) RStudio'dan çalıştırdığımda garip oluyor. İşte RStudio komut dosyası çağırın Nedense çıkış

# test1.R 
> 
> library(rPython) 
Loading required package: RJSONIO 
> 
> setwd("~/rpython") 
> 
> python.load("test1.py") 
Error in python.exec(code, get.exception) : No module named nltk 
> 
> number <- python.get("number") 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
NameError: name 'number' is not defined 
Error in python.get("number") : Variable not found 
> string <- python.get("string") 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
NameError: name 'string' is not defined 
Error in python.get("string") : Variable not found 
> 
> print(sqrt(number)) 
Error in print(sqrt(number)) : object 'number' not found 
> print(string) 
Error in print(string) : object 'string' not found 

, Python yorumlayıcısı modülünü nltk bulamaz (diğer pip yüklü modülleri ile aynı gibi görünüyor) ama random ithal sorunu yok .

+0

Bir virtualenv veya başka bir karmaşık yükleme/kütüphane yolu kurulumu mu kullanıyorsunuz? [Bu önceki soru] (http://stackoverflow.com/questions/20337202/using-python-virtual-env-in-r) adresini görüyorum ... – BrenBarn

+0

Hayır, bildiğim kadarıyla. – CptNemo

+0

Kodu yeni bir R oturumunda çalıştırsanız bile 'sayı 've' dize' davranışı hala devam ediyor mu? – BrenBarn

cevap

6

Bu problemi de yaşadım. Mesele, benim bash terminalimin bir Rstudio'dan farklı bir python çağırıyor gibi görünüyordu. Rython'dan sadece Python.load() 'u çağırmaya çalışıyorsanız, temel R kütüphanesinden sistem() ile daha iyi durumda olduğunuzu da öğrendim.

  1. Bash terminalinizin hangi pitonu çağıracağını belirleyin. Bash terminalinize gidin ve which python'u çalıştırın. Benim için (OS X 10.11.5) /usr/local/bin/python idi. Artık tam yolu biliyoruz, bunu açıkça söyleyebiliriz ve R makinenizin bazı köşelerine yüklenebilecek başka bir sürümü seçmesini engelleyebiliriz.
  2. python.load() yerine bash komutlarını çağırmak için system() kullanın ve komut dosyanızın tam yolunu kullanın. Örnek komut dosyası adınızı ve örnek python yolunu kullanarak, bu, system('/usr/local/bin/python /path/to/file/test.py1')

Umarım yardımcı olur!

+0

rPython'u kullanarak açıkça kullanmak istediğiniz python'u nasıl ararsınız? – Melanie

+0

Bu soru/cevap size yardımcı olmalıdır: http://stackoverflow.com/questions/25383030/rpython-using-wrong-python-installation-on-mac-osx –

+0

Bence cevabınız bash sonucunun bir karşılaştırmasını önerdi. R sonucu: sistem ("python --version") '. Daha sonra tutarsızlıkları nasıl çözeceğinizi açıklayın. –