2012-11-25 22 views
5

Ho scritto un piccolo client Java che esegue alcuni calcoli su un Rserver. A tal fine, ci sono i file functions.r - e libraries.r sul lato server, che devono essere originati, prima che il calcolo possa essere eseguito.Sourcing di file r una sola volta su Rserve

Attualmente mi caricare i file su ogni nuova connessione:

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(); 
    } 
} 

dove doOnRserve() è chiamato a causa di alcuni eventi sul lato client paio di volte in un minuto.

La mia domanda è: è possibile procurarsi le librerie una sola volta, in modo tale che siano disponibili durante tutte le nuove RSessions senza individuazione individuale?

ho provato sulla qualcosa di lato client simile:

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

che mi dà TE seguente eccezione (idea del perché questo non funziona Wile eval fa):

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

Posso avviare il Rserve con uno specifico .Rprofile?

EDIT:

Fondamentalmente, ci cucitura da tre metodi possibili:

  1. e la sorgente /home/rserve/.Rprofile file .R. Ma questo li distingue ogni volta che chiamo new RConnection()
  2. Passando i comandi sorgente direttamente a R all'avvio di Rserve (non so come farlo).
  3. Il mio metodo preferito: farlo dal lato client usando serverSource(), che genera queste eccezioni di "accesso negato".

EDIT2:

Rserve versione v0.6-8 (338)

R versione 2.15.2 per x86_64-pc-linux-gnu.

risposta

7

questo è banalmente fatta con l'aggiunta di source righe al file di configurazione, vale a dire, mettendo

source "/foo/bar.R" 

in /etc/Rserv.conf sarà fonte /foo/bar.R all'avvio. Se si desidera utilizzare un altro file di configurazione, utilizzare l'argomento della riga di comando --RS-conf per specificarlo. Infine, Rserve 1.x supporta l'opzione --RS-source anche dalla riga di comando.

Senza le virgolette nel percorso file, può dare Errore file non trovato.

BTW: hai menzionato l'accesso serverSource() negato - ciò significa che non hai abilitato i comandi di controllo in Rserve (control enable nella configurazione o --RS-enable-control nella riga di comando).

PS: Utilizzare la mailing list stats-rosuda-devel per le domande Rserve.

+0

Grazie, ma riguardo a 'serverSource' entrambi i metodi che hai citato non funzionano: Avviare il demone con' R CMD Rserve --RS-enable-control --RS-conf ~/control/Rserve.conf' dà un avvertimento su avvio: "Avviso: opzione sconosciuta '--RS-enable-control'". Aggiungendo 'controllo abilita' a (il mio locale) Rserve.conf non dà alcun avviso ma poi ottengo ancora l'eccezione Java:" serverSource non riuscito, stato richiesta: accesso negato (locale al server) " – Beasterfield

+1

Se' --RS-enable- control' non viene riconosciuto, quindi stai utilizzando il vecchio Rserve (probabilmente serie 0.x) che non lo supporta. Per quanto riguarda 'enable control' - si prega di eseguire la versione di debug per assicurarsi di aver impostato correttamente la configurazione in modo che mostrerà i flag che sono stati riconosciuti. Si noti inoltre che se si utilizza l'autenticazione utente è necessario specificare gli utenti a cui è consentito il rilascio di comandi di controllo (consultare i documenti). –

+0

mi dispiace, ma mi ci è voluto del tempo per tornare a questo. Sì, avevi ragione, avevo installato la serie 0.x. Molte grazie, questo è stato molto utile. – Beasterfield

1

Sì, è possibile. Ricordate sempre questo:

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> 

O come la documentazione per Rserve stati:

\ {descrizione Inizia Rserve in modalità demone (solo Unix).

Eventuali ulteriori parametri non relativi alla Rserve verranno trasmessi direttamente al sottostante R. Per la configurazione, l'utilizzo e la linea di comando parametri consultare la documentazione online all'indirizzo http://www.rforge.net/Rserve. Utilizzare \ code {R CMD Rserve --help} per un breve aiuto .

+0

Sono davvero dispiaciuto, ma questo non mi aiuta affatto (io * ho * letto tutta la documentazione di RServe). Forse è solo perché non so come passare un comando sorgente 'dritto alla R sottostante'. Ho provato ad aggiungere i comandi 'source' a Rserve.conf senza risultati. Ho creato un file .Rprofile e poi i comandi 'source' sono ancora chiamati ogni volta che creo un nuovo' RConnection'. Inoltre, .Rprofile non viene caricato quando avvio Rserve da uno script start-stop. – Beasterfield

+0

Spiacente, dimenticarsi del funzionamento .Rofil quando si avvia il demone con uno script start-stop. È stata colpa mia – Beasterfield

+0

Dovremmo forse modificare la domanda e/o rispondere per registrare un modo facilmente funzionante. Cosa hai scelto? 'RHOME/etc/Rprofile'? Una directory per-startup '.Rprofile'? –

Problemi correlati