next up previous contents
Next: D'autres remarques concernant Up: Comment écrire des Previous: Un exemple

Syntaxe et fix()

La syntaxe générale pour les fonctions est:


noms <- function( ... ) { ... }
Les parenthèses après function contiennent les paramètres de la fonction; les accolades contiennent le programme principal.

Vous pouvez utiliser des fonctions à l'intérieur de fonctions et il est possible de les appeler de manière récursive.

Pour écrire vos fonctions personnelles, nous vous conseillons d'utiliser la commande fix(). Choisissez d'abord votre éditeur de texte préféré (par exemple vi, ame, (x)emacs, xedit ou bien asedit sur nos stations Silicon Graphics) avec la commande

options(editor="ame") (On pourrait mettre cette commande dans .First Voir chapitre L'organisation du travail avec S-Plus)

puis tapez fix(nom.de.fonction). Comme exercice, écrivez une fonction pour calculer le déterminant d'une matrice carrée, fonction qui n'existe pas encore dans S-PLUS. Tapez donc fix(absdet) et une fenêtre de l'éditeur choisi s'ouvre avec la structure de base des fonctions. Ecrivez maintenant dans le fichier le code suivant (C'est en effet la valeur absolue du déterminant):

function(x)
{
   if(!is.matrix(x))
           stop("Ce n'est pas une matrice")
   if((dim(x)[1])!=(dim(x)[2])) 
           stop("La matrice n'est pas carree")
   val.singulieres <- svd(x)$d
   prod(val.singulieres)
}



Quittez après l'éditeur (seulement écrire sans quitter ne suffit pas) et la nouvelle fonction est prête à être utilisée. Tapez absdet pour la voir et x <- matrix(1:4,ncol=2,byrow=T) puis absdet(x) pour la tester. Avec fix() vous pouvez éditer à nouveau votre fonction.

Un autre moyen - certes moins sophistiqué - pour créer des nouvelles fonctions est le suivant: écrivez le code de la fonction dans votre éditeur en changeant la première ligne par

absdet <- function(x)
et sauvez le fichier sous le nom `` absdet.s'' dans le directoire à partir duquel vous lancez S-PLUS.

Remarque importante:

Il est nécessaire de faire un saut de ligne après la dernière accolade du code, sinon S-PLUS ne pourra pas le lire! Exécuter après dans S-PLUS la commande
source("absdet.s")

pour ainsi créer la nouvelle fonction. La fonction source() est aussi utile dans le cas suivant: vous avez une suite de commandes à exécuter et ceci plusieurs fois; écrivez alors ces commandes dans un fichier et puis utilisez source("nom.du.ficher") pour les exécuter.

next up previous contents
Next: D'autres remarques concernant Up: Comment écrire des Previous: Un exemple



Marcel Baumgartner