J'essaie actuellement d'exécuter un script R à partir de la ligne de commande (mon objectif final est de l'exécuter comme dernière ligne d'un script python). Je ne sais pas ce qu'est un fichier batch, ni comment rendre mon script R «exécutable». Actuellement, il est enregistré en tant que fichier .R. Cela fonctionne lorsque je l'exécute à partir de R.
Comment puis-je l'exécuter à partir de la ligne de commande Windows? Dois-je télécharger quelque chose appelé Rscript.exe? Dois-je simplement enregistrer mon script R en tant que fichier .exe? Veuillez indiquer la manière la plus simple d'y parvenir.
R: version 3.3 python: version 3.x os: windows

4
W Anderson 9 août 2016 à 19:42

3 réponses

Meilleure réponse

Vous avez probablement déjà R, car vous pouvez déjà exécuter votre script.

Il vous suffit de trouver ses binaires (le fichier Rscript.exe).

Ensuite, ouvrez la ligne de commande Windows ([cmd] + [R]> tapez: "cmd"> [entrée])

Entrez le chemin d'accès complet à R.exe, suivi du chemin d'accès complet à votre script.

1
Loïc 9 août 2016 à 17:07

Comme mentionné, Rscript.exe l'exécutable automatisé pour exécuter les scripts R est livré avec toute installation R (généralement située dans le dossier bin) et en tant que @ Dirk Eddelbuettel mentionne est la version automatisée recommandée. Et en Python, vous pouvez exécuter n'importe quel programme externe en tant que sous-processus avec différents types, notamment un appel , check_output , check_call ou Popen et ce dernier fournit plus de facilité comme la capture des erreurs dans le processus enfant.

Si le répertoire R se trouve dans votre variable d'environnement PATH, vous n'avez pas besoin d'inclure le chemin complet vers RScript.exe mais simplement le nom du programme, Rscript . Et notez que c'est à peu près le même processus pour les systèmes d'exploitation Linux ou Mac.

command = 'C:/R-3.3/bin/Rscript.exe'          # OR command = 'Rscript'
path2script = 'C:/Path/To/R/Script.R'
arg = '--vanilla'

# CHECK_CALL VERSION
retval = subprocess.check_call([command, arg, path2script], shell=True)

# CALL VERSION
retval = subprocess.call(["'Rscript' 'C:/Path/To/R/Script.R'"])

# POPEN VERSION (W/ CWD AND OUTPUT/ERROR CAPTURE)
curdir = 'C:/Path/To/R/Script'
p = subprocess.Popen(['Rscript', 'Script.R'], cwd=curdir,
                     stdin = subprocess.PIPE, stdout = subprocess.PIPE, 
                     stderr = subprocess.PIPE)            
output, error = p.communicate()

if p.returncode == 0:            
    print('R OUTPUT:\n {0}'.format(output.decode("utf-8")))
else:                
    print('R ERROR:\n {0}'.format(error.decode("utf-8"))) 
4
Community 23 mai 2017 à 11:54

Vous disposez déjà de Rscript, il est fourni avec votre version de R. Si R.exe, Rgui.exe, ... sont sur votre chemin, il en est de même pour Rscript.exe.

Votre appel de Python pourrait simplement être Rscript myFile.R. Rscript est bien meilleur que R BATCH CMD ... et d'autres modèles d'utilisation très anciens et obsolètes .

3
Dirk Eddelbuettel 11 août 2016 à 15:39