Sunteți pe pagina 1din 20

CAPITULO 4

FUNCIONES

4.1 FUNCIONES

Se puede acceder (llamar) a una determinada función desde cualquier parte del programa.
Cuando se llama a una función, se ejecutan las instrucciones que constituyen dicha función.
Una vez que se ejecutan las instrucciones de la función, se devuelve el control del programa
a la siguiente instrucción (si existe) inmediatamente después de la que provocó la llamada
a la función.

Cuando se accede a una función desde un determinado punto del programa, se le puede
pasar información mediante unos identificadores especiales conocidos como argumentos
(también denominados parámetros). Una vez que la función procesa esta información,
devuelve un valor mediante la instrucción return.

La estructura general de una función es la siguiente:


nombre_de_la_función =function (argumento1, argumento2, argumento3,…argumenton)

sentencias

return (object)

El objeto devuelto debe ser de cualquier tipo vector, matriz, lista, factor, array, data
frame, etc.

Ejemplo.- Escribe una función que suma dos números

>suma=function(A,B)
{
return (A+B)
}
> suma(4,5)
[1] 9

Ejemplo. - Escribe una función que calcula el área de un triángulo cuadrado

area=function(B,H)

A=(B*H)/2

return(A)

area(5,4)

[1] 10

Ejemplo. Calcula la raíz de una ecuación cuadrática


raiz=function(a,b,c)

{ d=b^2-4*a*c;

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

return (c(x1,x2));

raiz(1,3,2)

Ejemplo .- calcula la hipotenusa de un triángulo rectángulo

hipotenusa<-function(cateto1, cateto2)
{
h<-sqrt(cateto1^2+cateto2^2)
data.frame(variable=c("cateto","cateto","hipotenusa"),
valor=c(cateto1,c ateto2,h))
}
> hipotenusa(2,4)
variable valor
cateto 2.000000
cateto 4.000000
hipotenusa 4.472136

Ejemplo calcula el inverso de un numero

>inverso <- function(x)


{
x <- 1 / x
return(x)
}
> inverso(10)
[1] 0.1

Tambien es posible calcular

> inverso(1:10)
[1] 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000 0.1666667 0.142857
1 0.1250000 0.1111111 0.1000000

3.1.1 Argumento ‘…’ en una función


El argumento ‘…’ (sin las comillas) permite pasar un número variable de argumentos a una
función.
>inverso <- function(...)
{
v <- unlist(list(...)) # Asigna los argumentos a un vector
x <- 1/v
return(x)
}
> inverso(8) # Se comporta como la función anterior
[1] 0.125

Podemos calcular tambien

> inverso(8,9,10,11,12)
[1] 0.12500000 0.11111111 0.10000000 0.09090909 0.08333333

3.1.2 names(x) <- valor


Permite asignar nombres a los elementos de una variable
Ejemplo:

x <- c(2,4,6) # Asigna 3 valores a la variable x


> names(x) <- c("primero","segundo","tercero")
#Asigna nombres a los 3 valores anteriores
> x
primero segundo tercero
2 4 6

3.1.3 Recursividad

El principio de la recursión va más allá del principio de retroacción, el supera la noción de


la regulación por aquella de autoproducción y de autoorganización. Al respecto Nikals
Luhmann menciona:

“Recursividad significa en general (por ejemplo en las matemáticas) aplicación


repetida de una operación al resultado de la misma operación previa. La matemática
de las relaciones recursivas exigiría aquí una determinación exclusiva precisamente
por medio de esa relación. Es evidente que esto no se presenta en ningún contexto
real.”

La definición de recursividad a la que hace referencia Luhmann es la siguiente: “es una


función que se llama así misma, debe tener un caso base que se resuelve sin recursión que
tiene la propiedad de parar la llamada, y la llamada recursiva que tiende al caso base”. Para
nosotros el modelo se presenta en la realidad y depende de cómo se define la función, por
ejemplo las imágenes que se repiten en dos espejos paralelos, relatos dentro de relatos,
películas que hace referencia a películas, etc. Es este principio que adoptaremos para
construir el modelo matemático de complementariedad y cooperación entre sistemas.

R soporta la recursividad. La recursividad es un proceso mediante el cual se define la función


en base a ella misma , tiene un caso base, y la llamada recursiva tiende al caso base.

Ejemplo. Una función recursiva que suma los n primeros elementos

Expresaremos la siguiente suma en function a una recursividad

Suma: 0+1+2+…+(n-1)+n

La llamada recursiva es: suma(n)=suma(n-1)+n

El caso base: si n=0 debe retornar 0

El programa seria:

> suma=function(n)
{
if(n==0)
return(0)
else
return(suma(n-1)+n)

}
> suma(10)

[1] 55

Ejemplo. Una función recursiva que calcula el factorial de un numero

Expresaremos el siguiente producto en function a una recursividad

Suma: 1*1*2*…*(n-1)*n

La llamada recursiva es: factorial(n)=factorial(n-1)*n


El caso base: si n=0 debe retornar 1

El programa seria:

>factorial=function(n)
{
if(n==0)
return(1)
else
return(factorial(n-1)*n)

}
> factorial(5)
[1] 120

Ejemplo expresar la función exponente en funcion a la recursividad

Expresaremos el siguiente producto en function a una recursividad

expos(a,n): a*a*a*…*a*a n veces

La llamada recursiva es: expos(a,n)=expos(a,n-1)*a

El caso base: si n=1 debe retornar a

> expos=function(a,n)
{
if(n==0)
return(1)
else
return(expos(a,n-1)*a)

}
> expos(2,3)

[1] 8

Ejemplo. Suma los elementos de un vector recursivamente

Expresaremos la siguiente suma en function a una recursividad

sumav(v,n): v[1]+v[2]+. . . +v[n] ;

La llamada recursiva es: sumav(v,n)=sumav(v,n-1)+ v[n];

El caso base: si n=1 debe retornar V[1]


sumav=function(v, n)
{
if(n==1)
return(v[1])
else
return(sumav(v,n-1)+v[n])

}
> v=c(12,13,14,15,16)
> sumav(v,5)

[1] 70

Ejemplo. Un programa que calcula el maximo valor almacenado en un vector


recursivamente.

Solucion

Expresaremos la siguiente suma en function a una recursividad

maximov(v,n): max{v[1],v[2],. . . ,v[n-1],v[n]} ;

La llamada recursiva es: maximov(v,n)=max{ max(v[1],v[2],. . . ,v[n-1]}, v[n]};

El caso base: si (n==1)

debe retornar V[1]

llamada recursive En caso contrario

si (max(v[1],v[2],. . . ,v[n-1]}<= v[n])

Debe retornar v[n]

En caso contrario

Debe retornar max(v[1],v[2],. . . ,v[n-1]}


> maximov=function(v, n)
{
if(n==1)
return(v[1])
else
if(maximov(v,n-1) <= v[n])
return(v[n])
else
return(maximov(v,n-1))

}
> v=c(12,13,18,15,16)

> maximov(v,5)

[1] 18

3.2 FUNCIONES MATEMATICAS PREDEFINIDAS EN R

3.2.1 FUNCIONES MATEMATICAS ELEMENTALES DE VARIABLE REAL

Función Explicación

abs Calcula en modulo o valor absoluto


sin, sinh seno y seno hiperbólico

cos, cosh coseno y coseno hiperbólico

tan, tanh tangente y tangente hiperbólico

asin, asinh arco seno y arco seno hiperbólico

acos, acosh arco coseno y arco coseno hiperbólico

atan, atanh arco tangente y arco tangente hiperbólico

atan2 arco tangente en el cuarto cuadrante

ceiling redondeo al entero anterior

floor redondeo al entero siguiente (parte entera)

round redondeo al entero mas próximo

round(x,digits=n) redondeo a n dígitos

signif(x,digits=n) redondeo a n dígitos significativos

exp exponencial

log logaritmo natural neperiano

log2 logaritmo en base 2

log10 logaritmo decimal

log1p(x) logaritmo de 1+x

sign(x) signo de x

choose(a,b) número combinatorio a sobre b con a, b enteros

Ichoose(a,b) logaritmo de numero combinatorio a sobre b

factorial(x) factorial del entero x

lfactorial(x) logaritmo del factorial de x


sqrt raíz cuadrada
CAPÍTULO 5
ESTRUCTURA DE CONTROL
Y MANEJO DE DATOS
3.1 ESTRUCTURA CONDICIONAL
El lenguaje R, soporta las estructuras condicionales y en función del resultado de la misma
se realiza una instrucción u otra. Las condiciones se especifican usando expresiones
lógicas.

3.1.1. ESTRUCTURA CONDICIONAL IF

El formato general de la instrucción if es:

{ if(condición)

Secuencia de instrucciones

Ejemplo. Calcula el máximo de dos datos

> maximo=function(x,y)
{
if(x<y)
m=y
else
m=x
return(m)

}
> maximo(4,5)
[1] 5

Ejemplo 2. Calcula el máximo de tres números


>maximo3=function(x,y,z)
{
max=maximo(x,y)
if(max<z)
m=z
else
m=max
return(m)
}
> maximo3(4,5,8)
[1] 8

Ejemplo 3. Calcula la suma de los n primeros números naturales

> suma=function(n)
{
if(n==0)
return (0)
else
n+suma(n-1)
}
> suma(5)
[1] 15

Ejemplo 4. El siguiente programa verifica si un número es par o impar


>numpar=function(x)
{
if(x%%2==0)
print("es par")
else
print("es impar")
}

> numpar(4)

[1] "es par"

Ejemplo 5. El siguiente programa verifica si el número es positivo, negativo o


cero.
> positivo=function(x)
{
if(x==0)
print("es cero")
else
{
if(x>0)
print("es positivo")
else
print("es negativo")
}

}
> positivo(7)
[1] "es positivo"

ESTRUCTURA CONDICIONAL IF ELSE

Al igual que en el caso de if else, la estructura ifelse permite ejecutar una


secuencia de instrucciones si la condición tiene valor verdadero y otro
conjunto de instrucciones si la condición tiene valor falso.

La sintaxis es:

ifelse(condición, instrucción1, instrucción 2)

Si la condición tiene el valor true se ejecuta la instrucción 1, en caso contrario


se ejecuta la instrucción 2.

Ejemplo calcula la raíz cuadrada de números reales


> raizcuadrada=function(x)
{

ifelse(x>=0, sqrt(x), "imaginario")

}
> raizcuadrada(25)
[1] 5
> raizcuadrada(-8)
[1] "imaginario"
ESTRUCTURA SWITCH
El comando SWITCH permite ejecutar un bloque de código distinto en función del valor de
una variable.

switch(expresión ,

valor1={instrucción 1},

...

valor_n= {instrucción 2})

Ejemplo:
funcestadis=function(tipo, x)
{
switch(tipo,
media = mean(x),
maximo = max(x),
suma = sum(x)
)

}
> x=1:10 # creando un vector con 10 números
> funcestadis(media,x)
> funcestadis("media",x)
[1] 5.5
> funcestadis("maximo",x)
[1] 10
> funcestadis("suma",x)
[1] 55

INTRUCCIÓN FOR
La instrucción for es una instrucción repetitiva En la programación imperativa es habitual
construir bucles dentro de los cuales se va modificando el valor de una expresión. Los bucles
más habituales en R son los for. Su sintaxis es

for (variable in secuencia){


expresión
}

Ejemplo Calcula el factorial de un numero


>factorial=function(n){
factorial <- 1
if(n==0) return (factorial)
for (i in 1:n){
factorial <- factorial * i
}
return(factorial)
}
> factorial(7)
[1] 5040
> factorial(0)
[1] 1

Ejemplo Calcula la suma de una cantidad de números de un vector


> suma=function(x){
sum <- 0
n=length(x)
for (i in 1:n){
sum<- sum+x[i]
}
return(sum)
}
> x=1:10
> suma(x)
[1] 55
>x=c(12,2,3,4,13,15,16)
[1] 65

INSTRUCCIÓN WHILE

La instrucción while es una instrucción repetitiva, mientras la condición sea


verdadera se ejecuta un conjunto de instrucciones

La sintaxis es:

While (condición)

Instrucciones

Ejemplo Calcula el máximo común divisor de un número


> maximocd=function(a,b)
{ r=a%%b
while(r>0)
{
a=b
b=r
r=a%%b

}
return(b)
}
> maximocd(4,10)
[1] 2

Ejemplo calcula la suma de los elementos de un vector


> sumavector=function(x)
{ suma=0

n=length(x)
while(n>0)
{
suma=suma+x[n]
n=n-1
}
return(suma)
}
> x=c(2,4,6,8)
> sumavector(x)
[1] 20

INSTRUCCIÓN NEXT

La instrucción next pasa el control a la iteración siguiente en un bucle for o


while en el cual aparece, ignorando las restantes instrucciones en el cuerpo
del bucle.

Ejemplo Calcula el cuadrado de los números pares de -4 hasta 4.


> for(i in -4:4)
{
if(i%%2!=0)
next;
print(i^2)

}
[1] 16
[1] 4
[1] 0
[1] 4
[1] 16

INSTRUCCIÓN BREAK

La instrucción break finaliza la ejecución de un bucle for o while y continúa


con el resto del programa.

Ejemplo calcula la suma de los elementos de un vector


>sumavector=function(x)
{ suma=0

n=length(x)
while(1)
{
suma=suma+x[n]
n=n-1
if(n==0) break;
}
return(suma)
}
> x=c(2,4,6,8,12,14)
> sumavector(x)
[1] 46

INSTRUCCIÓN REPEAT

En esta estructura de repetición, un trozo de código se repite de forma


consecutiva hasta que la interrumpamos mediante la instrucción break.

La sintaxis de la sentencia de control repeat, es la siguiente:

repeat
{
expresión 1
expresión 2
···
expresión N

if(condición) break;
}

La diferencia entre otras estructuras de repetición es que en la repeat, es


neceario interrupir el bucle mediante la instrucción break de lo contrario,
nunca terminaría las repeticiones.
Es por ello que, dicha instrucción, se emplee conjuntamente con estructuras
condicionales tales como: if o if-else, entre otras.

Ejemplo Calcula la suma de los primero n primeros al cuadrado

> sumacuadrados=function(n)
{
suma=0;
repeat
{
suma=suma+n^2
n=n-1
if(n==0) break;
}
return(suma);
}
> sumacuadrados(10)
[1] 385

S-ar putea să vă placă și