2017-05-24 4 views
0

Actuellement, j'utilise R sur mon ordinateur local, où je suis en mesure de générer plusieurs scripts R conditionnellement (car ils sont placés dans mon lecteur local).Recherche de plusieurs fichiers R dans

Cependant, lorsque j'ai besoin d'utiliser les mêmes scripts sur RENJIN dans Google Data Flow pour obtenir un parallélisme, je ne peux pas générer de fichiers.

J'ai plusieurs fichiers de script R avec l'extension .R. J'ai besoin de lire le fichier de script R principal et j'ai besoin de passer dans le flux de données au moment de l'exécution, mais le fichier R principal doit avoir un tag source qui fait référence à d'autres fichiers de script. Lors de la lecture du contenu du fichier R principal à partir de Java et de sa transmission au flux de données google, Jave n'est pas en mesure d'interpréter les balises sources dans les fichiers R faisant référence à d'autres fichiers script R.

Pour gérer cette situation, je peux utiliser une solution en désordre pour conserver le code entier dans un fichier. avec différents noms de fonctions. Renvoie-t-il tous les fichiers de script R qui doivent être utilisés et transmis au flux de données google au moment de l'exécution?

Répondre

0

La solution la plus logique serait d'utiliser un paquet ici. Je suppose que vous pouvez installer des paquets personnalisés sur le cloud google (juste avoir la base R serait douloureuse). Je mettrais alors ces fonctions et code dans un paquet R, et installerais ce paquet. Cela permettrait de se débarrasser de l'utilisation de source et permettre l'inclusion de la documentation et des tests.

+0

Merci, Paul ... oui cela peut être l'un des moyens.je pensais si nous pouvions utiliser ces fichiers comme il utilise la source ou toute autre syntaxe .... faire un paquet peut être très difficile pour moi car je N'a jamais essayé –

0

Si vos sources sont incluses comme ressources dans un fichier JAR vous déployez à Google Cloud Dataflow, vous pouvez les sources en utilisant une URL « res »:

source("res:com/acme/scripts/myscript.R") 

Si vous ne pouvez pas modifier les chemins en le script, puis assurez-vous qu'ils sont au moins par rapport, par exemple:

source("myscript.R") 

Et puis définissez le répertoire de travail lorsque vous créez un nouveau ScriptEngine.

RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory(); 
ScriptEngine engine = factory.getEngine(); 
engine.eval("setwd('res:com/acme/scripts')"); 

Notez que la définition du répertoire de travail quelque part sur le chemin de classe ne fonctionne que de manière fiable s'il n'y a qu'un seul JAR sur le chemin de classe avec ce chemin. Si, par exemple, j'évalue:

> setwd("res:org/renjin") 
> getwd() 
[1] "jar:file:///usr/share/renjin/lib/compiler-0.8.2337.jar!/org/renjin" 

Les ensembles au-dessus du répertoire de travail dans le premier répertoire « org/Renjin » sur le chemin de classe, ce qui est peut-être pas ce que vous voulez.

Dans tous les cas, je vous encourage à rassembler les fichiers dans le paquet comme suggéré ci-dessus, mais peut-être que cela aidera à faire bouger les choses.

+0

Salut akbertram, j'ai créé un projet java avec le paquet com.acme.scripts et j'ai collé tous mes fichiers R dans le paquet et j'ai créé un fichier jar de cela. Ensuite, j'ai inclus ce fichier jar dans mon projet où j'ai besoin de ces fichiers R pour exécuter dans le moteur de script besoin de le nourrir dans google dataflow. Ce sont le résultat de cette approche. –

+0

Ne fonctionne pas engine.eval ("setwd ('res: com/acme/scripts')"); System.out.println ("Répertoire de travail -" + engine.eval ("getwd()")); org.renjin.eval.EvalException: URI mal formé "res: com/acme/scripts". Moteur de travail .eval ("setwd ('res: org/renjin')"); System.out.println ("Répertoire de travail -" + engine.eval ("getwd()")); Répertoire de travail - pot: fichier: /// C: /Users/anurag/.m2/repository/org/renjin/renjin-script-engine/0.8.2298/renjin-script-engine-0.8.2298.jar!/org/renjin –

+0

Vérifiez le fichier JAR que vous incluez. Vous devriez pouvoir l'ouvrir à partir de Windows Explorer et vérifier qu'il existe un répertoire "com" contenant un répertoire "acme" contenant un répertoire "scripts" contenant vos fichiers R. – akbertram