Outils pour utilisateurs

Outils du site


public:specs_r_engine

Intégration du moteur R

Objectif

Améliorer l'intégration actuelle de R dans TXM, en terme d'architecture (performance) et d'UI (expérience utilisateur).

Méthode

  • Architecture : intégrer R par JNI plutôt qu'Rserve (R devient une librairie dynamique de la JVM, plus de communication par sockets)
  • UI : utiliser les plugins Eclipse intégrant R
  • Vérifier la cohérence des packages R installés

État de l'art

Composant R

Implémentation des nombres dans R

Voir la section “Numerical Characteristics of the Machine” : http://stat.ethz.ch/R-manual/R-devel/library/base/html/zMachine.html

Par exemple, le nombre flottant le plus proche de zéro n'étant pas zéro est indiqué par la constante “.Machine$double.xmin”. Sa valeur sur la machine de MD est 2,225074e-308.

Architecture

Le projet Rosuda produit JRI qui encapsule R par JNI.

JRI fait partie de rJava.

Attention : le rôle de rJava est d'appeler une JVM depuis R, celui de JRI est inverse, appeler R depuis une JVM. JRI a du être intégré à ce projet pour faciliter sa maintenance.

Voir aussi RCaller https://github.com/jbytecode/rcaller.

UI

StatET est un plugin Eclipse intégrant R et offrant au moins 3 services fondamentaux :

  • une console R interactive avec coloration syntaxique, complétion, historique, etc.
  • une vue d'exploration des objets R (il y a aussi une vue listant les packages R)
  • une intégration de la documentation R dans le système de documentation Eclipse

Il scénarise une session de travail R comme un travail dans un projet Eclipse.

On en trouve une description rapide ici : http://lukemiller.org/index.php/2010/04/eclipse-and-statet-a-nice-working-environment-for-r.

Ce plugin présente beaucoup d'intérêt. Il semble par ailleurs offrir plus de services que les environnements intégrant R usuels voire la console R standard : par exemple la recherche dans l'historique de la console R. Ça semble être un concurrent sérieux de JGR et c'est vivant en 2013.

Voir aussi :

Vérification des packages

Tickets : 635

La 1ere version a été d'ajouter de vérifier l'installation des packages R lors de l'installation. Or, l'installation peut échouée alors que le package fonctionne correctement. La 2e version a été d'ajouter une vérification du chargement des packages R de TXM lors du job (Eclipse) de démarrage de TXM. Or, ce test pose des problèmes de synchronisation (thread) qui font crasher TXM. La 3e version est de rajouter une commande “Vérifier les packages R” (EN= Check R packages) dans le menu Aide de TXM. Cette commande reprend exactement le même test que la version 2 et affiche une fenêtre de dialogue pour indiquer le succès ou non du test.

Code de test des packages :

library("textometry")
library("FactoMineR") # cette ligne échoue lors du job de démarrage de TXM.

Configuration de l’environnement de R de TXM

  • Répertoire courant :
    setwd("TXMHOME/R")
  • Limiter l'affichage :
    options(max.print=5000)
  • Répertoire d'installation des packages :
    .libPaths("TXMHOME/R/libraries)
  • Repository par défaut :
    options(repos=\"" + repos + "\")
    • repos = réglage dans préférences R

Réglages spécifiques à RServe :

  • Délai de latence d'attente :
    options(timeout = 3)
  • Réglage du proxy :
    <Sys.setenv(http_proxy=\"" + proxyUrl + "\")"/code>
        * proxyUrl = récupéré depuis la classe org.txm.utils.network.SystemProxyDetector
    
    === Suivi des versions de R  ===
    
    R-cran publie des nouvelles versions mineures tous les 3 mois environs. Les packages ne suivent pas forcement ce rythme et des décalages de publications se font.
    
    == Mac OS X ==
    
    Depuis la version 10.10 de Mac OS X, il est nécessaire d'installer [[http://xquartz.macosforge.org|XQuartz]] pour pouvoir produire des graphiques SVG avec R. cela est du au faite que Mac OS X ne livre plus X11 par défaut. (il faut installer XCode)
    
    R maintient une version de R (3.2.1 - 2015-06-19) qui fonctionne pour les Mac OS X antérieur à la version 10.9 (Maverick) de Mac OS X. Mais cette version n'est plus maintenue et n'ai pas conseillée pour les versions suivantes de Mac OS X.
    
    Dans la version courante de R (3.3.3), l’exécutable de R (ligne de commande) est installé dans %%/usr/local/bin%% anciennement %%/usr/bin/R%% -> c'est pourquoi lorsqu'on installe R-3.3.3, il faut indiquer à TXM le nouveau chemin. 
    
    Version de R par version de setup TXM :
      * TXM 0.7.7 - R 3.2.1
      * TXM 0.7.8 - R 3.3.2
    
    == Linux ==
    
    Versions de R en fonction de la version d'Ubuntu : 
      * Ubuntu 12.04 installe par défaut 2.14.1
      * Ubuntu 14.04 installe par défaut 3.0.2
      * Ubuntu 16.04 installe par défaut 3.2.3
    
    ===== Solution =====
    
    R : 
      * installation : 
        * Windows : installé par TXM
        * Mac OS X : installé par TXM si absent ou version incompatible
        * Ubuntu : délégation d'installation a dpkg
      * packages : 
        * Rserve : module client-serveur basé sur socket (réseau ou pas)
        * textometry
        * FactoMineR
        * + dependances
    
    TXM : 
      * préférences de réglages de lancement de R
        * local : chemin vers le binaire + options
        * distant : Adresse du serveur Rserve + options
      * client Java de Rserve (Rosuda)
      * surcouche Java de manipulation des objets R : (manipulation des Tables lexicales, résultats d'AFC...)
        * RWorkspace : wrappeur Java de code R bas niveau
        * LexicalTableImpl
        * MatrixImpl
        * SpecificitiesResult
        * etc.
    
    ==== TXM 0.7.7 ====
    
    La version de R dépend de l'OS et du contexte d'installation :
      * Windows : 3.1.2 embarqué dans TXM
      * Max OS X : 
        * si R n'est pas présent lors de l'installation : 3.1.2 est installé (livré dans l'archive d'installation de TXM)
      * Linux : utilise le R installé sinon installe R à l'aide de apt-get (pas de contrôle de version)
        * Ubuntu 12.04 installe par défaut 2.14.1
        * Ubuntu 14.04 installe par défaut 3.0.2
        * Ubuntu 16.04 installe par défaut 3.2.3
    
    ==== TXM 0.7.8 ====
    
    Embarquer R dans le setup Ubuntu de TXM pour s'assurer de : 
      * la version de R
      * l'installation correcte des packages R
    
    ==== TXM 0.8.3 ====
    
    Mise à jour de R à la version 4.2.2.
    
    Si possible réduire le surplus de place disque lors de l'installation de R :
      * R + recommended : 190Mo
      * R + Rserve + textometry + FactoMineR : 450Mo
        * dont 260Mo pour FactoMineR et ses dépendances
    
    === Analyse du volume ===
    
    La taille des libraries une fois installées varient en fonction de OS.
    
    === Ubuntu ===
    
    L'ensemble fait 387 Mo :
    
    <code bash>
    du -sk R-4.2.2-builded/R-4.2.2
    386 920 Ko
  • une grande partie du volume vient de grosses librairies .so (en violet)
  • ensuite des ressources R .rdb, etc. (en gris)
  • du code C .h, etc. (en vert)
  • de la doc .pdf, etc. (en bleu)
  • très peu d'images .png, etc. (en jaune)

FactoMineR fait 4 Mo :

du -sk R-4.2.2-builded/R-4.2.2/library/FactoMineR
3 912 Ko

et dépend de : car, cluster, DT, ellipse, emmeans, flashClust, graphics, grDevices, lattice, leaps, MASS, multcompView, scatterplot3d, stats, utils, ggplot2, ggrepel (voir https://cran.r-project.org/web/packages/FactoMineR/index.html)

Il faut analyser l'ensemble (récursivement) des packages utilisés pour FactoMineR.

Calcul de tous les packages nécessaires au fonctionnement de FactoMineR

Calcul dans RStudio (je n'arrive pas à le faire dans TXM ou dans le R de TXM, cf messages dans les mails) :

> db <- available.packages()
> tools::package_dependencies(db = db, recursive = TRUE)$FactoMineR
[1] "car"           "cluster"       "DT"            "ellipse"       "emmeans"       "flashClust"    "graphics"      "grDevices"
[9] "lattice"       "leaps"         "MASS"          "multcompView"  "scatterplot3d" "stats"         "utils"         "ggplot2"
[17] "ggrepel"       "carData"       "abind"         "mgcv"          "nnet"          "pbkrtest"      "quantreg"      "lme4"
[25] "nlme"          "scales"        "htmltools"     "htmlwidgets"   "jsonlite"      "magrittr"      "crosstalk"     "jquerylib"
[33] "promises"      "estimability"  "methods"       "numDeriv"      "mvtnorm"       "cli"           "glue"          "grid"
[41] "gtable"        "isoband"       "lifecycle"     "rlang"         "tibble"        "vctrs"         "withr"         "Rcpp"
[49] "lazyeval"      "R6"            "digest"        "base64enc"     "fastmap"       "ellipsis"      "yaml"          "knitr"
[57] "rmarkdown"     "Matrix"        "splines"       "parallel"      "boot"          "minqa"         "nloptr"        "RcppEigen"
[65] "broom"         "dplyr"         "later"         "SparseM"       "MatrixModels"  "survival"      "farver"        "labeling"
[73] "munsell"       "RColorBrewer"  "viridisLite"   "fansi"         "pillar"        "pkgconfig"     "backports"     "generics"
[81] "purrr"         "stringr"       "tidyr"         "tidyselect"    "evaluate"      "highr"         "xfun"          "tools"
[89] "colorspace"    "testthat"      "utf8"          "bslib"         "fontawesome"   "tinytex"       "sass"          "cachem"
[97] "memoise"       "mime"          "stringi"       "brio"          "callr"         "desc"          "pkgload"       "praise"
[105] "processx"      "ps"            "waldo"         "cpp11"         "rprojroot"     "crayon"        "fs"            "rappdirs"
[113] "diffobj"       "rematch2"

Soit la liste : car, cluster, DT, ellipse, emmeans, flashClust, graphics, grDevices, lattice, leaps, MASS, multcompView, scatterplot3d, stats, utils, ggplot2, ggrepel, carData, abind, mgcv, nnet, pbkrtest, quantreg, lme4, nlme, scales, htmltools, htmlwidgets, jsonlite, magrittr, crosstalk, jquerylib, promises, estimability, methods, numDeriv, mvtnorm, cli, glue, grid, gtable, isoband, lifecycle, rlang, tibble, vctrs, withr, Rcpp, lazyeval, R6, digest, base64enc, fastmap, ellipsis, yaml, knitr, rmarkdown, Matrix, splines, parallel, boot, minqa, nloptr, RcppEigen, broom, dplyr, later, SparseM, MatrixModels, survival, farver, labeling, munsell, RColorBrewer, viridisLite, fansi, pillar, pkgconfig, backports, generics, purrr, stringr, tidyr, tidyselect, evaluate, highr, xfun, tools, colorspace, testthat, utf8, bslib, fontawesome, tinytex, sass, cachem, memoise, mime, stringi, brio, callr, desc, pkgload, praise, processx, ps, waldo, cpp11, rprojroot, crayon, fs, rappdirs, diffobj, rematch2.

Calcul du volume total de tous ces répertoires

R-4.2.2-builded/R-4.2.2/library/* :

On copie la liste brute Rstudio dans FactoMineR-dep.txt

On produit la liste des packages dans FactoMineR-dep-list.txt :

cat FactoMineR-dep.txt | sed -e 's/^\[[^ ]* "//g' -e 's/"[^"]*"/\n/g' -e 's/"$//' >FactoMineR-dep-list.txt

On itère pour chaque package pour le calcul du volume :

(for p in `cat FactoMineR-dep-list.txt`; do du -sb R-4.2.2-builded/R-4.2.2/library/$p; done) | cut -f1 | paste -sd+ | bc
308512680

Soit 308 Mo en tout.

Calcul du volume par répertoire

(trié par volume décroissant, en Ko)

42388	RcppEigen
32588	lme4
19376	Rcpp
12556	nloptr
10800	testthat
10568	Matrix
10464	bslib
8236	survival
8036	stringi
7504	farver
7256	rmarkdown
7008	stats
6288	DT
5676	sass
5432	vctrs
5324	ggplot2
5108	mgcv
4608	colorspace
3724	later
3572	promises
3396	rlang
3212	grDevices
3212	emmeans
3032	nlme
3000	knitr
2976	isoband
2876	tidyr
2808	grid
2804	tools
2776	graphics
2736	jsonlite
2732	dplyr
2700	ggrepel
2452	utils
2380	cli
2280	quantreg
2232	broom
2220	carData
2176	methods
2172	htmlwidgets
2168	SparseM
2152	fontawesome
1972	fs
1880	car
1824	tibble
1716	minqa
1640	jquerylib
1556	MASS
1484	pillar
1484	lattice
1428	diffobj
1420	viridisLite
1252	cpp11
1220	crosstalk
1136	digest
1124	cluster
1016	fastmap
904	yaml
888	processx
848	boot
844	purrr
840	fansi
816	utf8
756	scales
716	ps
696	stringr
628	xfun
616	callr
600	parallel
556	MatrixModels
548	mvtnorm
532	magrittr
500	htmltools
488	scatterplot3d
448	lazyeval
444	tidyselect
436	munsell
424	desc
400	lifecycle
396	withr
392	glue
388	gtable
368	pbkrtest
328	nnet
312	ellipse
304	rprojroot
268	pkgload
252	leaps
248	crayon
228	tinytex
224	splines
220	numDeriv
216	backports
200	waldo
196	multcompView
196	brio
192	R6
188	cachem
172	highr
172	generics
172	evaluate
168	base64enc
160	rappdirs
156	ellipsis
152	mime
148	labeling
144	RColorBrewer
144	abind
140	memoise
136	rematch2
136	flashClust
128	estimability
120	pkgconfig
116	praise

Préparer R pour Linux et installer les libraries

wget https://cran.r-project.org/src/base/R-4/R-4.2.2.tar.gz
tar -xf R-4.2.2.tar.gz
cd R-4.2.2
./configure --enable-R-shlib --enable-java # will also build libR.so
make # très long
make clean # remove .o etc files
./bin/R

Installer les packages R pour TXM:

install.library("Rserve", repos="https://cran.rstudio.com");
install.library("textometry", repos="https://cran.rstudio.com");
install.library("FactoMineR", repos="https://cran.rstudio.com"); # très long

Rendre standalone R pour linux et Mac OS X: Remplacer le début du script “R_HOME_DIR=…” dans bin/R par

MY_PATH="`dirname \"$0\"`"
MY_PATH="`( cd \"$MY_PATH\" && pwd )`"

R_HOME_DIR="`readlink -f \"$MY_PATH/..\"`"

Ajouter dans le répertoire “lib” les fichier .so dont libR.so dépend.

Pistes :

  • supprimer les sources de R
  • supprimer la doc de R
  • supprimer la doc des libraries
  • supprimer les tests des libraries (et les données rda associées)

Préparer R pour Windows

Télécharger et installer R pour Windows https://cran.r-project.org/bin/windows/base/R-4.2.3-win.exe

Lancer bin/R.exe et installer les packages R de TXM :

install.library("Rserve", repos="https://cran.rstudio.com");
install.library("textometry", repos="https://cran.rstudio.com");
install.library("FactoMineR", repos="https://cran.rstudio.com");

TXM X.X

Embèder R dans tous les setups de TXM pour s'assurer de :

  • la version de R
  • l'installation correcte des packages R

Recette

État courant

public/specs_r_engine.txt · Dernière modification : 27/06/2023 16:46 de matthieu.decorde@ens-lyon.fr