Next: Fonctions statistiques
Up: Comment écrire des
Previous: Syntaxe et fix()
Les options dans function(): la fonction args() vous donne
les options de n'importe quelle fonction. Faites args(mean) et S-PLUS vous donne:
-
- function(x, trim = 0, na.rm = F)
x est donc un argument nécessaire dans l'appel de mean(),
tandis que trim = 0 et na.rm = F indiquent les valeurs par
défaut d'options que vous pouvez adapter vous-même. Regardez maintenant
args(hist):
-
- function(x, nclass, breaks, plot = TRUE, probability = FALSE,
..., xlab=deparse(substitute(x)))
x est toujours un argument nécessaire, mais nclass et
breaks sont seulement des options sans valeur par défaut.
Notez l'argument particulier `` ...'': ceci permet d'ajouter d'autres arguments,
notamment des options graphiques. Un exemple est hist(x, main="Titre")
qui ajoute directement un titre à votre graphique.
Si vous écrivez de longues fonctions, vous devez souvent chercher des
erreurs dans le programme. Mettez
alors simplement la ligne browser() dans votre code et à chaque
fois que le programme arrive à cet endroit, il s'arrête et vous
donne la possibilité de tester si vos variables créées sont correctes. Tapez
le nom de la variable et S-PLUS
vous montre son contenu.
Un exemple d'une application plus sophistiquée du browser():
teste <- function(x,y,w=rep(1,length(x)),debug=F)
{ [votre programme]
if(debug) browser()
[reste du programme]
}
Cette fonction permet de trouver des erreurs possibles; appelez teste avec
teste(x1,y1, debug=T). Remarque: écrivez 0 pour quitter
le browser().
D'autres fonctions utiles dans la programmation:
- for(), For() pour faire des boucles:
Un exemple: l'estimation de l'écart-type de la moyenne par la méthode du
``jackknife''.
Un code simple serait:
jackknife <- function(x)
{n <- length(x)
u <- rep(0,n)
for(i in 1:n) {
u[i] <- mean(x[-i])
}
ecart.type <- sqrt(((n-1)/n) * sum((u-mean(u))^2))
ecart.type
}
Le for() peut aussi être utilisé au niveau principal: supposez
que vous avez une matrice x qui contient dans ses colonnes 9
séries chronologiques. Pour les imprimer dans 9 fenêtres
graphiques différentes sur une page, vous pourriez écrire:
par(mfrow=c(3,3))
for(i in 1:9) plot(x[,i],main=paste("Serie ",i))
par(mfrow=c(1,1))
title("Presentation graphiques de 9 series chronologiques")
Remarque:
S-PLUS
peut avoir des problèmes de mémoire si vous faites
un nombre très élevé de boucles, même si elles
contiennent des instructions très simples.
A partir de la version 3.1, S-PLUS
offre une option: la fonction
For().
Bien que l'utilisation soit un peu plus compliquée que celle de for(),
For() est plus rapide pour des boucles contenant des instructions
plus complexes
car elle calcule chaque itération séparément, ce qui évite
quelques problèmes de mémoire.
La stratégie principale consiste néanmoins à éviter les for() le
plus souvent possible en utilisant d'autres
fonctions de S-PLUS
(regardez plus particulièrement sous apply(), tapply(),
sapply() et lapply()). Les chapitres 12 et 13 du Programmer's
Manual contiennent plusieurs autres remarques concernant ce sujet.
Si ceci n'est pas possible, il faudra programmer les instructions
dans un langage autre que S-PLUS:
On peut faire des interfaces avec Fortran et C. Consultez le programmer's Manual et la
documentation sur .Fortran et .C.
- if(), ifelse():
La syntaxe est:
-
- if(test) expr.TRUE ou bien
-
- if(test) expr.TRUE else expr.FALSE
Dans le cas où vous avez plusieurs instructions à exécuter,
mettez expr.TRUE entre accolades. La fonction ifelse() est
pratique dans le cas où le conditionnement est simple. Sa syntaxe est:
-
- ifelse(teste, yes, no)
La condition dans if() peut être divisée en plusieurs
parties. Si c1 et c2 sont deux valeurs logiques,
l'expression c1 && c2 vaut `` T'' si les deux expressions
valent `` T'' (si c1 est `` F'', c2 n'est pas
évaluée). L'expression c1 || c2 vaut `` T'' si une
des deux expressions vaut `` T'' (si c1 est `` T'',
c2 n'est pas évaluée).
- menu(), switch():
Les commandes menu() et switch() permettent d'évaluer une
instruction parmi
plusieurs autres. Un exemple:
menu.test <- function(x, y)
{
choix <- c("Moindres carres", "Regression LMS", "Regression L1")
reponse <- menu(choix)
switch(reponse,
lsfit(x, y),
lmsreg(x, y),
l1fit(x, y),
stop("Mauvais choix!"))
}
Cette fonction vous donne le choix entre la régression des moindres
carrés usuelle, la régression robuste LMS (``Least Median of Squares'')
et la régression en norme L1.
- while(), repeat, break:
La syntaxe est:
-
- while(condition) expression
Si vous ne pouvez pas facilement exprimer
la condition d'arrêt pour un while(), utilisez repeat
avec break:
repeat {
[votre programme]
if(condition) break
[reste du programme]
}
Next: Fonctions statistiques
Up: Comment écrire des
Previous: Syntaxe et fix()
Marcel Baumgartner