2012-11-25 11 views
5

पर केवल एक बार आर-फाइलों को सोर्स करना मैंने एक छोटा जावा क्लाइंट लिखा है जो Rserver पर कुछ गणना करता है। इस उद्देश्य के लिए, functions.r - और libraries.r सर्वर पक्ष पर फ़ाइलें हैं, जिन्हें वास्तविक गणना करने से पहले, सोर्स किया जाना है।रुपये

वर्तमान में मैं हर नए कनेक्शन पर फ़ाइलें लोड:

import org.rosuda.REngine.Rserve.RConnection; 

public class RserveTester { 

    public void doOnRserve() { 
    RConnection c = new RConnection("rserve.domain.local"); 
    c.login("foo", "user"); 
    c.eval("source(\"/home/rserve/lib/libraries.r\")"); 
    c.eval("source(\"/home/rserve/lib/functions.r\")"); 
    c.eval("someCalculation()") 
    c.close(); 
    } 
} 

जहां doOnRserve() एक मिनट में कई बार ग्राहक के पक्ष जोड़ी पर कुछ घटनाओं के कारण कहा जाता है।

मेरा प्रश्न है: क्या पुस्तकालयों को केवल एक बार स्रोत करने की संभावना है, जैसे कि वे व्यक्तिगत सोर्सिंग के बिना सभी नए आरएसएशन के दौरान उपलब्ध हैं?

मैं जैसे क्लाइंट पक्ष पर कुछ करने की कोशिश की:

c.serverSource("/home/rserve/lib/libraries.r") 
c.serverSource("/home/rserve/lib/functions.r") 

कौन सा मुझे ते अपवाद निम्न देता है (पता नहीं क्यों यह काम नहीं करता छलबल eval करता है):

org.rosuda.REngine.Rserve.RserveException: serverSource failed, request status: access denied (local to the server) 

मैं शुरू कर सकते हैं एक विशिष्ट .Rprofile के साथ सुरक्षित?

संपादित करें:

  1. /home/rserve/.Rprofile स्रोत .R फ़ाइलों करते हैं:

    असल में, वहाँ तीन संभावित तरीकों होना सीवन। लेकिन जब भी मैं new RConnection()

  2. को कॉल करते समय स्रोत आदेशों को सीधे आर तक पास करता हूं (कोई विचार नहीं है कि यह कैसे करें)।
  3. मेरी पसंदीदा विधि: सर्वर स्रोत() का उपयोग करके क्लाइंट पक्ष से इसे कर रही है, जो इन "पहुंच से वंचित" अपवादों को फेंकता है।

EDIT2:

Rserve संस्करण v0.6-8 x86_64-पीसी-linux-gnu के लिए (338)

आर संस्करण 2.15.2।

उत्तर

7

यह तुच्छता से अपने विन्यास फाइल को source लाइनों को जोड़ने, जैसे कि, /etc/Rserv.conf में

source "/foo/bar.R" 

डाल स्रोत होगा स्टार्टअप पर /foo/bar.R द्वारा किया जाता है। यदि आप किसी अन्य कॉन्फ़िगरेशन फ़ाइल का उपयोग करना चाहते हैं, तो इसे निर्दिष्ट करने के लिए --RS-conf कमांड लाइन तर्क का उपयोग करें। अंत में, रु। 1.x कमांड लाइन पर --RS-source विकल्प का भी समर्थन करता है।

फ़ाइलपैथ में उद्धरण के बिना, यह फ़ाइल नहीं मिली त्रुटि दे सकता है।

बीटीडब्लू: आपने serverSource() एक्सेस का खंडन किया है - इसका मतलब है कि आपने कॉन्फ़िगरेशन में control enable या कमांड लाइन पर --RS-enable-control में नियंत्रण आदेश सक्षम नहीं किए हैं)।

पीएस: कृपया रुपये के प्रश्नों के लिए आंकड़े-रोसुडा-डेवेल मेलिंग सूची का उपयोग करें।

+0

धन्यवाद, लेकिन 'सर्वरसोर्स' से संबंधित दोनों विधियों का आपने काम नहीं किया है: 'आर सीएमडी रुर्व - आरएस-सक्षम-नियंत्रण - आरएस-conf ~/control/Rserve.conf' के साथ डिमन शुरू करना' पर एक चेतावनी देता है स्टार्टअप: "चेतावनी: अनजान विकल्प '--आरएस-सक्षम-नियंत्रण'"। 'नियंत्रण सक्षम' को जोड़ना (मेरा स्थानीय) Rserve.conf कोई चेतावनी नहीं देता है लेकिन फिर भी मुझे जावा अपवाद मिलता है: "सर्वर स्रोत विफल हुआ, अनुरोध स्थिति: पहुंच अस्वीकृत (सर्वर के लिए स्थानीय)" – Beasterfield

+1

यदि '--RS- सक्षम- नियंत्रण' पहचाना नहीं गया है तो आप पुराने रुपये (शायद 0.x श्रृंखला) का उपयोग कर रहे हैं जिसने इसका समर्थन नहीं किया। 'नियंत्रण सक्षम' के लिए - कृपया यह सुनिश्चित करने के लिए डीबग संस्करण चलाएं कि आपने कॉन्फ़िगरेशन को सही तरीके से सेट किया है, इसलिए यह ध्वजांकित किए गए झंडे दिखाएगा। यह भी ध्यान रखें कि यदि आप उपयोगकर्ता प्रमाणीकरण का उपयोग करते हैं तो आपको उन उपयोगकर्ताओं को निर्दिष्ट करना होगा जिन्हें नियंत्रण आदेश जारी करने की अनुमति है (दस्तावेज़ देखें)। –

+0

बहुत खेद है, लेकिन मुझे वापस आने के लिए कुछ समय लगा। हाँ आप सही थे, मैंने 0.x श्रृंखला स्थापित की थी। बहुत धन्यवाद, यह बहुत उपयोगी था। – Beasterfield

1

हाँ आप कर सकते हैं। हमेशा यह याद रखना:

R> fortunes::fortune("Yoda") 

Evelyn Hall: I would like to know how (if) I can extract some of the information 
      from the summary of my nlme. 
Simon Blomberg: This is R. There is no if. Only how. 
    -- Evelyn Hall and Simon 'Yoda' Blomberg 
     R-help (April 2005) 

R> 

या प्रलेखन के रूप में Rserve के लिए कहता है:

\ वर्णन {डेमॉन मोड में Rserve शुरू होता है (यूनिक्स केवल)। Rserve से संबंधित नहीं

किसी भी अतिरिक्त मापदंडों विन्यास, उपयोग और कमांड लाइन के लिए आर अंतर्निहित के लिए सीधे पारित हो जाएगा पैरामीटर http://www.rforge.net/Rserve ऑनलाइन दस्तावेज़ देखें। संक्षिप्त सहायता के लिए \ code {R CMD Rserve --help} का उपयोग करें।

+0

मुझे वास्तव में खेद है, लेकिन यह मेरी मदद नहीं करता है (मैंने * पूरे आरएसर्व दस्तावेज को पढ़ा है)। शायद यह इसलिए है क्योंकि मुझे नहीं पता कि स्रोत-कमांड को सीधे अंतर्निहित आर को कैसे पास किया जाए। मैंने 'स्रोत' कमांड को रुपये.conf में बिना किसी परिणाम के जोड़ने की कोशिश की। मैंने एक .profile बनाया और फिर 'स्रोत' आदेशों को तब भी कहा जाता है जब भी मैं एक नया 'RConnection' बनाता हूं। इसके अलावा, आरप्रोफाइल लोड नहीं होता है जब मैंने स्टार्ट-स्टॉप-स्क्रिप्ट द्वारा आरक्षित शुरू किया। – Beasterfield

+0

क्षमा करें, काम नहीं करने के बारे में भूल जाओ .profil जब स्टार्ट-स्टॉप-स्क्रिप्ट द्वारा डिमन शुरू करते हैं। वह मेरी गलती थी। – Beasterfield

+0

हमें शायद एक आसानी से काम करने के तरीके को रिकॉर्ड करने के लिए प्रश्न और/या जवाब संपादित करना चाहिए। आपने क्या चुना 'RHOME/आदि/Rprofile'? प्रति-स्टार्टअप-निर्देशिका 'आरप्रोफाइल'? –

संबंधित मुद्दे