2014-06-21 8 views
8

के माध्यम से सभी पायथन मॉड्यूल लोड नहीं करता है मेरे पास बैश से और RStudio के भीतर से एक ही स्क्रिप्ट चलाने वाले कुछ अप्रत्याशित व्यवहार हैं।RStudio rpython कॉल

कृपया निम्नलिखित पर विचार करें।

# test1.R 

library(rPython) 

setwd("~/rpython") 

python.load("test1.py") 

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

print(sqrt(number)) 
print(string) 

और

# test1.py 

import random, nltk 

number = random.randint(1, 1000) 

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

मैं जो अपेक्षा के अनुरूप

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

वापस आती है और अगर मैं फोन Rscript test1.R साथ बैश से मेरी आर स्क्रिप्ट कॉल कर सकते हैं,: मैं "~/rpython" दो लिपियों वाला कोई फ़ोल्डर है यह फिर से एक अलग यादृच्छिक संख्या

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

लेकिन जब मैं RStudio चीजों से एक ही स्क्रिप्ट (test1.R) चलाता हूं तो अजीब हो जाता है। यहाँ उत्पादन

# 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 

किसी कारण जब मैं RStudio से स्क्रिप्ट फोन के लिए, पायथन दुभाषिया मॉड्यूल nltk का पता नहीं लगा सकते हैं (यह अन्य pip स्थापित मॉड्यूल के साथ एक ही प्रतीत हो रहा है), लेकिन random आयात करने कोई समस्या नहीं है ।

+0

क्या आप वर्चुअलनव या किसी अन्य जटिल इंस्टॉल/लाइब्रेरी पथ सेटअप का उपयोग कर रहे हैं? मैं [यह पिछला प्रश्न] देखता हूं (http://stackoverflow.com/questions/20337202/using-python-virtual-env-in-r) ... – BrenBarn

+0

नहीं, जहां तक ​​मुझे पता है। – CptNemo

+0

क्या आप 'नंबर' और' स्ट्रिंग 'का व्यवहार तब भी करते हैं जब आप किसी नए आर सत्र में कोड चलाते हैं? – BrenBarn

उत्तर

6

मुझे यह समस्या भी थी। मुद्दा यह था कि मेरा बैश टर्मिनल एक Rstudio की तुलना में एक अलग पायथन बुला रहा प्रतीत होता है। मैंने यह भी सीखा है कि यदि आप केवल RPython से Python.load() को कॉल करने का प्रयास कर रहे हैं, तो आप बेस आर लाइब्रेरी से सिस्टम() के साथ शायद बेहतर हो सकते हैं।

  1. यह पता लगाएं कि आपके बैश टर्मिनल कौन सा पायथन कॉल कर रहा है। अपने बैश टर्मिनल पर जाएं और which python चलाएं। मेरे लिए (ओएस एक्स 10.11.5) यह /usr/local/bin/python था। अब जब हम पूर्ण पथ को जानते हैं, तो हम इसे स्पष्ट रूप से कॉल कर सकते हैं और आर को किसी अन्य संस्करण को चुनने से रोक सकते हैं जो आपकी मशीन के कुछ कोने में स्थापित हो सकता है।
  2. system() का उपयोग python.load() के बजाय आर से बैश कमांड को कॉल करने के लिए करें, और अपनी स्क्रिप्ट के पूर्ण पथ का उपयोग करें। अपने उदाहरण स्क्रिप्ट नाम का उपयोग करके, और मेरा उदाहरण पायथन पथ, यह system('/usr/local/bin/python /path/to/file/test.py1')

आशा करता है कि मदद करता है!

+0

आप जिस पायथन को स्पष्ट रूप से आरपीथन का उपयोग कर चाहते हैं उसे कैसे कॉल करते हैं? – Melanie

+0

इस प्रश्न/उत्तर में मदद करनी चाहिए: http://stackoverflow.com/questions/25383030/rpython-using-wrong-python-installation-on-mac-osx –

+0

मुझे लगता है कि आपके उत्तर को बैश परिणाम की तुलना का सुझाव देना चाहिए था आर परिणाम से: 'सिस्टम ("पायथन --वर्जन") '। फिर विसंगतियों को हल करने का वर्णन करें। –