Manual de R (Estadística)/Escriure les funcions pròpies

Introducció

modifica

Amb 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)

modifica

L'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