2010-03-19 9 views
2

J'ai créé ma propre bibliothèque R (appelée "Media"). Il n'y a aucun problème quand j'essaye de le charger avec RGui, et je peux appeler les fonctions définies dans le nouveau paquet. Voilà comment je le charge:Problème de chargement R Bibliothèques créées propres dans le code Java/JRI

> library(Media) 

Mais, j'essaie aussi d'appeler que les fonctions à partir du code Java/JRI, et lorsque je charge le nouveau package R, Java ne semble pas trouver le pacakge, jetant la message "erreur dans la bibliothèque (médias): objet 'Media' not found"

Ceci est mon code actuel à l'aide JRI:

REXP rexpSetFolder = re.eval("setwd('C:/Users/Albert/Documents')"); 
    REXP rexpFolder = re.eval("getwd()"); 
    System.out.println(rexpFolder.asString()); 

    REXP rexpLoad = re.eval("library(Media)"); // fails 

Il échoue également sans la commande 'setwd', et les appels simples aux éléments existants Les fonctions R fonctionnent bien. J'utilise R 2.10 et le dernier JRI 0.5-0 sous Windows.

Toute aide serait appréciée. Merci beaucoup.

Edit:

Le paramètre lib.loc semble fonctionner, au moins cette phrase ne renvoie pas d'erreur:

library("Media", lib.loc = "c:/Users/Albert/Documents") 

Mais après cela, appeler une fonction dans le package avec re.eval("myfunction()"); échoue encore , car la fonction n'est pas correctement trouvée.

Répondre

1

Avez-vous installé la bibliothèque correctement en premier? Vous pouvez essayer d'utiliser le paramètre lib.loc.

library("Media", lib.loc = "c:/Users/Albert/Documents") 
+0

Je vais essayer, mais la chose étrange est que je peux exécuter le même code sans problèmes directement dans RGui. Je vous remercie. –

+0

La phrase semble fonctionner avec l'argument "lib.loc" mais, après cela, appeler une fonction dans le paquet appelé "media" avec re.eval ("media (t)"); échoue toujours, avec un message qui dit qu'il n'était pas capable de trouver la fonction "média" ... –

1

autour du travail-Mon était de copier le paquet de ma bibliothèque personnelle (% USERPROFILE% \ Documents \ R) à la bibliothèque mondiale (% R_HOME% de bibliothèque \).

Ce n'est pas le meilleur car cela nécessite des privilèges d'administrateur qui ne sont pas tous les utilisateurs auront ...

+0

Malheureusement je n'ai pas trouvé de solution (la tienne me semble une bonne solution de contournement). J'ai finalement souligné les fonctions dans un appel de réévaluation, au lieu de les intégrer à une bibliothèque (comme j'essayais de le faire). –

3

Vous pouvez modifier le chemin de la bibliothèque - voir ?.libPaths dans R, vous voulez simplement ajouter votre bibliothèque privée sur le chemin. L'interface graphique fait cela pour vous, mais si vous êtes dehors, cela n'arrive pas. Par exemple:

re.eval(".libPaths('c:/users/foo/Documents/R')"); 

Ensuite, chargez votre package.

+0

Cela m'a été utile. Mais j'ai dû utiliser: 're.eval (". LibPaths ('c: /users/foo/Documents/R/win-library/3.2') ");', dans Windows. –