Manual de R (Estadística)/Escriure les funcions pròpies
Introducció
modificaAmb el R l'usuari pot escriure les seves pròpies funcions. Normalment una funció te l'estructura següent:
- La paraula
function
. - Un parell de parèntesis que inclou la llista d'arguments de la funció.
- Les ordres de la funció entre claus {}.
function(<Llista paràmetre>) {
.. ordres ..
}
Més concretament:
<NOM_FUNCIÓ> <- function (<NOM_VARIABLE_1, NOM_VARIABLE_2 ...) {
''<instruccions de la funció>''
return <NOM_VARIABLE_RESULTAT>;
}
Per exemple, la funció següent:
DT <- function(X) {
sd <- sqrt(var(X)) # Calcula la desviació típica de la variable ''X'
sd # Mostra per pantalla la desviació típica de la variable ''X'
}
calcula i mostra per pantalla la desviació típica de la variable X. Un cop carregada al R (es marca el bloc i s'executa) es pot calcular l'error típic d'una variable numèrica com, p. ex., la variable edat de la taula de dades Aids2 del paquet MASS:
> data(Aids2, package="MASS")
> str(Aids2)
'data.frame': 2843 obs. of 7 variables:
$ state : Factor w/ 4 levels "NSW","Other",..: 1 1 1 1 1 1 1 1 1 1 ...
$ sex : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
$ diag : int 10905 11029 9551 9577 10015 9971 10746 10042 10464 10439 ...
$ death : int 11081 11096 9983 9654 10290 10344 11135 11069 10956 10873 ...
$ status : Factor w/ 2 levels "A","D": 2 2 2 2 2 2 2 2 2 2 ...
$ T.categ: Factor w/ 8 levels "hs","hsid","id",..: 1 1 1 5 1 1 8 1 1 2 ...
$ age : int 35 53 42 44 39 36 36 31 26 27 ...
> DT(Aids2$age)
[1] 10.06326
Habitualment a la funció se li assigna un nom. P. ex., la funció anterior s'anomenava DT (per desviació típica). Per exemple, la funció EQ2N següent dona les solucions d'una equació de segon grau:
EQ2N<-function(A,B,C){
if (A==0) {
return (c("Els paràmetres introduïts no pertanyen a una equació de segon grau"))}
else
if (B^2-4*A*C<0) {
return (c("La solució és complexa", complex(real = -B/(2*A), imaginary = -sqrt(-B^2+4*A*C)/(2*A)),complex(real = -B/(2*A), imaginary = sqrt(-B^2+4*A*C)/(2*A))))}
else
{
SOL1<-(-B-sqrt(B^2-4*A*C))/(2*A);
SOL2<-(-B+sqrt(B^2-4*A*C))/(2*A);
return (c(SOL1,SOL2))}
}
Si en es carrega al R i després s'executa, s'obté:
> EQ2N(2, 6, 1)
[1] -2.8228757 -0.1771243
Depuració (per fer)
modificaL'ordre debug
permet executar una funció pas a pas.
L'ordre traceback
mostre l'estat de la pila de les crides a la funció durant l'últim error (la funció més profunda en primer lloc). XXX No se si la traducció és correcte. Tret de http://zoonek2.free.fr/UNIX/48_R_2004/02.html#1 XXX
Referències
modifica
Enllaços externs
modifica- Functions (anglès)