53 votes

Interface Python pour le langage de programmation R

Je suis assez nouveau dans R, et plutôt habitué à python. Je ne me sens pas très à l'aise pour écrire du code R. Je cherche une interface python pour R, qui me permet d'utiliser des packages R de manière pythonique.

J'ai fait des recherches sur Google et trouvé quelques packages qui peuvent faire cela :

Mais je ne suis pas sûr lequel est le meilleur ? Lequel a plus de contributeurs et est plus activement utilisé ?

Veuillez noter que ma principale exigence est d'accéder aux packages R d'une manière pythonique.

0 votes

Vous voudrez peut-être ajouter reticulate à la liste cran.r-project.org/web/packages/reticulate/vignettes/…

66voto

gauden Points 4926

Comme l'a souligné @lgautier, il y a déjà une autre réponse sur le sujet. Je laisse ma réponse ici car elle ajoute l'expérience d'approcher R en tant que novice, connaissant d'abord Python.


J'utilise à la fois Python et R et je comprends votre besoin en tant que nouveau venu sur R.

Étant donné que toute réponse que vous obtiendrez sera subjective, je résume quelques points de mon expérience :

  • J'utilise rpy2 comme interface et je trouve qu'il est 'Pythonic', stable, prévisible et assez efficace pour mes besoins. Je n'ai pas utilisé les autres packages donc ce n'est pas un commentaire sur eux, mais plutôt sur les mérites de rpy2 lui-même.
  • MAIS ne vous attendez pas à ce qu'il soit facile d'utiliser R en Python sans apprendre les deux. J'ai trouvé qu'ajouter une interface entre les deux langages permet une facilité de codage lorsque vous maîtrisez les deux, mais c'est un cauchemar pour le débogage pour quelqu'un qui est déficient dans l'un des langages.

Mon conseil :

  1. Pour la plupart des applications, Python a des packages qui vous permettent de faire la plupart des choses que vous voulez faire en R, du traitement des données au tracé. Consultez SciPy, NumPy, pandas, BioPython, matplotlib et d'autres packages scientifiques, ou même le package Python complet Anaconda ou Enthought. Cela vous permet de rester dans l'environnement Python et vous fournit la plupart de la puissance dont vous avez besoin.
  2. En même temps, vous voudrez les nombreuses packages spécialisées de R, donc passez du temps à l'apprendre dans un environnement interactif. J'ai trouvé presque impossible de maîtriser même le R de base en ligne de commande, mais RStudio et les tutoriels sur Quick-R et Learn-R m'ont permis de progresser très rapidement.

Une fois que vous maîtrisez les deux, alors vous ferez des merveilles avec rpy2 sans les horreurs du débogage entre les langages.


Nouvelles ressources

Mise à jour du 29 Jan 2015

Cette réponse s'est révélée populaire alors j'ai pensé qu'il serait utile de signaler deux ressources plus récentes :

Le triplet R, Rserve et pyRserve permet la mise en place d'un pont réseau de Python à R : Maintenant les fonctions R peuvent être appelées depuis Python comme si elles étaient implémentées en Python, et même des scripts R complets peuvent être exécutés via cette connexion.

  • Il est maintenant possible de combiner R et Python en utilisant rmagic dans IPython/Jupyter facilitant grandement le travail de production de recherche reproductible et de cahiers combinant les deux langages.

1 votes

J'ai trouvé le débogage du code R à partir de Python assez difficile. Par exemple, les instructions browser n'étaient pas prises en compte. Quelle est votre expérience?

2 votes

@PaulHiemstra: pareil pour moi. Je ne pouvais jamais être sûr si quelque chose échouait (a) parce que j'avais un bug en Python ou R ou (b) parce que rpy2 ne fonctionnait pas ou (c) une combinaison. De nos jours, je code directement la partie dont j'ai besoin en R puis j'exécute le script depuis Python si besoin.

2 votes

Le navigateur ne fonctionne actuellement pas depuis rpy2 (bitbucket.org/lgautier/rpy2/issue/66/…). Une erreur se produisant lors de l'évaluation du code R déclenchera une exception RRuntimeError, qui devrait indiquer où se trouvait le point de défaillance dans R ou Python.

5voto

lgautier Points 4164

Une question sur la comparaison entre rpy2, pyrserve et pyper a été répondue sur le site plus tôt.

En ce qui concerne le nombre de contributeurs, je dirais que les 3 ont un nombre relativement faible. Un site comme Ohloh peut donner une réponse plus détaillée.

Il est difficile de déterminer activement l'utilisation d'un package. Une indication pourrait être le nombre de téléchargements, une autre pourrait être le nombre de publications sur les listes de diffusion ou le nombre de questions sur un site comme stackoverflow, le nombre d'autres packages l'utilisant ou le citant, le nombre de CV ou d'offres d'emploi mentionnant le package. Autant je crois pouvoir donner une évaluation juste, autant je pourrais aussi être considéré comme ayant un conflit d'intérêts. ;-)

Les trois ont leurs avantages et leurs inconvénients. Je dirais que vous basez votre choix là-dessus.

0 votes

Totalement juste, Laurent, et merci pour le super travail sur rpy2 :)

0 votes

Dans rpy2 est le seul projet répertorié dans Ohloh. Mais ce n'est pas grave. D'après les forums, il semble que rpy2 soit plus discuté sur stack-overflow. Si je suis bloqué dans le processus, je sais que je peux compter sur vous pour demander de l'aide. Merci pour la réponse :)

4voto

Paul Hiemstra Points 28390

Mon expérience personnelle a été avec Rpy, pas Rpy2. Je l'ai utilisé pendant un certain temps, mais je l'ai abandonné au profit de l'utilisation de commandes system. Un cas typique pour moi était d'exécuter un modèle FORTRAN à l'aide de scripts Python, et de faire du post-traitement avec R. À mon avis, la solution la plus simple était de créer un outil en ligne de commande utilisant R, ce qui est assez simple (du moins sous Linux). L'outil en ligne de commande pouvait être exécuté à la racine de l'exécution du modèle, et le script produisait un ensemble d'objets R et de graphiques dans un répertoire Routput. L'avantage de dissocier R et Python de cette manière était que je pouvais facilement déboguer le code R séparément du code Python.

Je pense que Rpy est particulièrement utile lorsque beaucoup d'allers-retours de communication entre R et Python sont nécessaires. Mais si la fonctionnalité est bien séparable, et que les problèmes de lecture/écriture sur disque ne sont pas trop importants, je resterais sur des appels system. Consultez ?system pour plus d'informations sur les appels système, et Rscript pour exécuter des scripts R en tant qu'outil en ligne de commande.

Concernant votre souhait d'écrire du code R de manière Python, cela n'est pas possible car toutes les solutions nécessitent que vous écriviez du code R dans la syntaxe R. Pour Rpy, cela signifie une syntaxe R, mais un peu différente (pas de . par exemple). Je suis d'accord avec @gauden qu'il n'y a pas de raccourci pour utiliser R via Rpy.

0 votes

Des extraits de code pour savoir comment mettre en place un appel de fonction en R à exécuter à partir de Python de la manière que vous décrivez sont fournis ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X