2009-07-27 10 views
4

Je sais que je dois faire une erreur de syntaxe simple, mais je veux avoir un fichier batch Windows qui déclenche 9 instances de R et exécute une routine différente dans chacune . Je veux que ceux-ci s'exécutent simultanément (c'est-à-dire de manière asynchrone). Je peux lancer 9 fenêtres d'invite de commande et taper une commande dans chacune d'elles, mais il semble qu'avec la commande START, je devrais pouvoir les faire partir d'un seul fichier batch.Obtenir des fenêtres pour démarrer R en mode batch à l'aide de la commande Démarrer

Voici un exemple de la façon dont je commence une des instances de R:

"C:\Program Files (x86)\R\R-2.8.1\bin\R" CMD BATCH "C:\Users\jd\Documents\mexico\Estado\getdata1.r" 

La lecture de ce previous stackoverflow question avec this previous question me fait penser que je devrais être en mesure de le faire:

START "" "C:\Program Files (x86)\R\R-2.8.1\bin\R" CMD BATCH "C:\Users\jd\Documents\mexico\Estado\getdata1.r" /b 

Ce ne renvoie pas d'erreur, il renvoie juste une invite et R ne démarre jamais. Qu'est-ce que je rate?

+0

est «/b » un paramètre pour la commande START? Je pense que cela passe au programme R. Essayez de le changer en START/b .... mais je ne suis pas sûr que cela explique vraiment le problème (R ne commence jamais). – ars

+0

Avez-vous résolu ceci, @JD? –

+0

@Roman, j'ai fini par construire Segue :) Si je devais essayer de résoudre le même problème aujourd'hui, j'utiliserais Multicore ou doRedis. –

Répondre

4

Réponse simple. Sur les fenêtres lors de l'exécution de la commande, utilisez "Rcmd" et non "R CMD". Il existe un exe séparé pour exécuter les commandes. Regardez dans le dossier bin de votre installation R.

+0

mais la neige est certainement le moyen le plus sophistiqué de paralléliser un travail. –

+0

oui, la neige est plus sophistiquée ... et avec cette sophistication vient beaucoup de frais généraux –

5

Je ferais deux choses différemment:

  1. Utilisez R lui-même pour expédier neuf emplois différents; le paquet snow est très bon à ceci même quand n'utilisent pas MPI/PVM/NWS pour le travail distribué. Quelques exemples pour l'utilisation de la neige sont par exemple dans mon «introduction à l'informatique de haute performance avec R 'tutoriels liés de this page. Avec snow, vous obtenez des versions 'parallèles' des fonctions apply que vous pouvez exécuter sur plusieurs instances de R exécutées sur l'ordinateur local (ou bien sur un réseau d'ordinateurs si vous en avez un). La liste r-sig-hpc est utile pour des questions plus détaillées.

  2. Passez à l'utilisation de Rscript.exe au lieu d'utiliser 'R CMD BATCH'. Sous Linux/OS X vous obtenez également un choix d'utiliser Littler

Cela dit, je lance presque tous mes emplois sur Linux donc il peut y avoir une réponse spécifique Windows ici aussi que je ne sais pas. Mais ce qui précède est générique et reste dans l'esprit agnostique de la plate-forme de R.

+0

OK cela fait vraiment du bon sens. Je dois décomposer et passer une journée à envelopper mon cerveau faible autour de la neige et de MPI. Le processus parallèle est certainement l'avenir, mais j'ai mis du temps à accélérer. –

+1

Et la bonne chose est que vous pouvez expérimenter avec de la neige en utilisant seulement des sockets réseau sur la machine locale avant de passer à MPI. Cela dit, neuf tâches sur une seule machine peuvent quand même épuiser votre mémoire. –

1

Il n'a pas été immédiatement ressort clairement des autres réponses comment faire réellement ce travail (sans avoir recours à parallèle des alternatives de traitement, voici donc une solution que j'ai trouvé qui fonctionne très simplement sur les fenêtres

Si vous avez un exemple simple r fichier:.

for(i in 1:10){ 
    ptm0 <- proc.time() 
    Sys.sleep(0.5) 
    ptm1=proc.time() - ptm0 
    jnk=as.numeric(ptm1[3]) 
    cat('\n','It took ', jnk, "seconds to do iteration", i) 
} 

le CMD, spécifiez le répertoire où votre script est puis lancez une nouvelle fenêtre avec RSCRIPT pour exécuter votre code plusieurs lignes ouvriront plusieurs instances r qui exécutent votre code qui reproduisent également les messages les sorties de code

cd "C:\rcode" 
START "" Rscript example_code.r /b 
START "" Rscript example_code.r /b 

Si RSCRIPT est pas sur le chemin du système, il suffit de spécifier le chemin complet à la place:

START "" "C:\Program Files\R\bin\x64\Rscript.exe" text_within_loop.r /b