sumarNumeros<-function(a,b){
sum<-a+b
return(sum)
}
# Pruebas de la funcion
sumarNumeros(1,1)[1] 2
sumarNumeros(-1,1)[1] 0
sumarNumeros(-2,-3)[1] -5
Desarrolle los pasos necesarios para dar solución a cada uno de los siguientes planteamientos.
Para cada uno de los siguientes casos o situaciones desarrolle una función en R.
Construir una función que reciba dos números y que entregue la suma de estos números, llame a la función como sumarNumeros
sumarNumeros<-function(a,b){
sum<-a+b
return(sum)
}
# Pruebas de la funcion
sumarNumeros(1,1)[1] 2
sumarNumeros(-1,1)[1] 0
sumarNumeros(-2,-3)[1] -5
Construir una función que genere números aleatorios entre cero y uno hasta que la suma de éstos números supere por primera vez el valor de 3. La función debe entregar el vector de números aleatorios generados hasta que se cumpla la condición. Llame a la funcion sumarHasta.
sumarHasta<-function(){
rand<-runif(100,min=0,max=1)
rand_acum<-cumsum(rand)
v1<-rand_acum[rand_acum<=3]
v2<-rand[1:length(v1)]
return(v2)
}
# Pruebas de la funcion
sumarHasta()[1] 0.7299239 0.6004541 0.1586488 0.8610108
Construir una función que, dado un número entero positivo (cota) ingresado por el usuario, genere números aleatorios entre cero y uno hasta que la suma de los números generados exceda por primera vez la cota. La función debe entregar una lista de salidas: un vector con los números aleatorios, la suma y la cantidad de números aleatorios hasta la cota. Si el usuario no ingresa el valor de la cota, se debe asumir igual a 1. Llame a la funcion sumarHastaCota.
sumarHastaCota<-function(cota=1){
rand<-runif(100,min=0,max=1)
rand_acum<-cumsum(rand)
v1<-rand_acum[rand_acum<=cota]
v2<-rand[1:length(v1)]
lista<-list(vector=v2,
suma=sum(v2),
cantidad=length(v2))
return(lista)
}
# Pruebas de la funcion
sumarHastaCota() # Sin colocar cota$vector
[1] 0.2662128 0.1015702 0.1454171
$suma
[1] 0.5132001
$cantidad
[1] 3
sumarHastaCota(5) # Cota de 5$vector
[1] 0.886988146 0.166569347 0.700948673 0.824167100 0.001444523 0.920518427
[7] 0.530960559 0.939432041
$suma
[1] 4.971029
$cantidad
[1] 8
Construya una función que reciba dos números de la recta real y que entregue el punto medio de estos números. El resultado debe ser un mensaje por pantalla. Llame a la función como calcularMediaRecta.
calcularMediaRecta<-function(a,b){
mid<-a+(b-a)/2 # (a+b)/2
texto<-paste0("El punto medio de [",a,",",b,"] es: ",mid)
return(texto)
}
# Pruebas de la funcion
calcularMediaRecta(2,5)[1] "El punto medio de [2,5] es: 3.5"
Construya una función que reciba dos números reales a y b, la función debe decir cuál es el mayor de ellos. Llame a la funcion calcularMayor.
calcularMayor<-function(a,b){
if(a>b){
return(a)
}else{
return(b)
}
}
# Pruebas de la funcion
calcularMayor(5,3)[1] 5
calcularMayor(3,3)[1] 3
calcularMayor(3,5)[1] 5
calcularMayor(-3,-5)[1] -3
Construir funciones en R que realicen lo solicitado.
Construya una función que reciba dos números reales a y b, la función debe decir cuál es el mayor de ellos, llame a la función calcularMayor. Realice los siguientes ejercicios empleando dicha función:
El mayor entre 2 y 3.
El mayor entre -1 y 0
El mayor entre 1 y 1
El mayor entre TRUE y FALSE
El mayor entre “hola” y 5 (prepare siempre modulo de seguridad a fallos).
Escriba una función llamada calcularMedia que calcule la media muestral de un vector numérico x ingresado a la función. A continuación la fórmula para calcular la media muestral.
\(\bar x=\sum_{i=1}^n\frac{x_i}{n}\)
Nota: no puede usar la función mean( ).
Empleando la funcion anterior, calcule la media de:
Del vector de ingresos rgamma(1000,2,1), con semilla aleatoria 123
Del vector \(y\), que se obtiene de \(y=x^2\) en un dominio \([1,4]\) (evalue 100 valores de \(x\) en dicho dominio.
Del vector de precios de diamantes del dataset diamonds del paquete ggplot
calcularRaices que encuentre las raíces reales de una ecuación de segundo grado. El usuario debe suministrar los coeficientes a, b y c de la ecuación \(ax^2+bx+c=0\) y la función debe retornar:
De solución a las siguientes ecuaciones:
\(x^2=4\)
\(x(x+2)=-1\)
\(x^2-7x-18=0\)
\(x^2+1=0\)
cambiarUnidadesLongitud, en la que se reciba un valor numerico, una unidad del sistema de medida de Longitud inicial y una unidad del sistema de medida de Longitud final (deseada a transformar), debe retornar un valor numerico. Por ejemplo: Suponga que se busca transformar 3 m a dam (metros a decametros). Tome de referencia la siguiente tabla:Realice las siguientes conversiones:
1283 mm a dm
1.2 hm a dm
0.072 km a cm
1.79 m a cm
1 dam a m
cambiarUnidadesTiempo, en la que se reciba un valor numerico, una unidad del sistema de medida de Tiempo inicial y una unidad del sistema de medida de Tiempo final (deseada a transformar), debe retornar un valor numerico. Por ejemplo: Suponga que se busca transformar 10 min a s (minutos a segundo). Tome de referencia la siguiente tabla:Realice las siguientes conversiones:
1 dia a minutos
1.5 años a horas
12896 segundos a horas
18 horas a dias
1.89 meses a segundos
calcularFisicas que calcule la velocidad de un proyectil dado que el usuario ingresa la distancia recorrida en alguna unidad de distancia (Km, Hm, …) y el tiempo necesario en alguna unidad de tiempo (segundos, min, horas). El resultado se debe expresar en metros/segundo con el valor hallado y las unidades a modo texto (ejemplo: 3 m/s), recuerde que\[ velocidad = \frac{distancia}{tiempo} \]
Sugerencia: para transformar unidades, puede hacer uso de las funciones de cambiar unidades calculadas previamente.
Calcule la velocidad de un proyectil que recorrió 12.8 km en 1.3 mins
Calcule la velocidad de un proyectil que recorrió 987 dam en 0.035 horas.
intercambiarValores que reciba dos valores \(a\) y \(b\) y que los intercambie. Es decir, si ingresa \(a=4\) y \(b=9\) que la función retorne \(a=9\) y \(b=4\), debe mostrar el resultado a modo texto empleando notación de coordenadas, por ejemplo: T(a,b) = (b,a) . Genere los siguientes intercambios o transformaciones:\(x=3, y=-1\)
\(x=y+1, y=3\)
calcularHoraDespues que reciba los valores en horas, minutos y segundos de una momento de interes por el usuario y un valor numerico, el cual representara la cantidad de segundos posteriores a la hora dada, debe retornar el valor de la hora final al cabo de \(T\) segundos en forma de tripleta. Por ejemplo, para la entrada (13:43:24) al cabo de 10 segundos, se tiene que devolver (13:43:34).Para la hora inicial 16:08:31, determine la hora al cabo de:
22 segundos
129 segundos
500 segundos
4220 segundos
precio que calcule el precio total de sacar A fotocopias y B impresiones, sabiendo que los precios son 50 y 100 pesos para A y B respectivamente si el cliente es un estudiante, y de 75 y 150 para A y B si el cliente es un profesor. La función debe tener dos argumentos cuantitativos (A y B) y el argumento lógico estudiante que por defecto tenga el valor de TRUE. Use la estructura mostrada abajo.precio <- function(A, B, estudiante=TRUE) {
...
...
...
return(precio_total)
}
Determine el precio final en cada escenario presentado:
Un estudiante decide sacar 12 copias y 7 impresiones.
Un profesor decide sacar 12 copias y 7 impresiones.
Un profesor decide sacar 15 impresiones.
Un estudiante decide sacar 26 copias.
salario que le ingrese el salario por hora y el número de horas trabajadas durante una semana por un trabajador. La función debe calcular el salario neto semanal, teniendo en cuenta que si el número de horas trabajadas durante la semana es mayor de 48, esas horas de demás se consideran horas extras y tienen un 35% de recargo. Imprima el salario neto. Use la estructura mostrada abajo.salario <- function(num.horas, valor_hora) {
...
...
...
return(salario_neto)
}
Retorne el salario neto devengado por cada uno de los siguientes funcionarios:
Funcionario A: recibe salario por hora de $12 y esta semana trabajó 48 horas.
Funcionario B: recibe salario por hora de $8 y esta semana trabajó 60 horas.
Funcionario C: recibe salario por hora de $25 y esta semana trabajó 38 horas.
nota que calcule la nota obtenida por un alumno en una evaluación de tres puntos cuya ponderación o importancia son 20%, 30% y 50% para los puntos I, II y III respectivamente. La función debe retornar una lista con la nota obtenida y el resultado obtenido, el cual es un mensaje sobre si el estudiante aprobó la evaluación o no (Aprueba, No Aprueba), aprueba si la nota es mayor a 70. El usuario debe ingresar las notas individuales de los tres puntos y la función debe entregar la nota final de la evaluación. Use la estructura mostrada abajo.nota <- function(p1, p2, p3) {
...
...
...
}
Obtenga la nota y resultado para cada estudiante dadas las tripletas:
(82, 44, 70)
(40,50, 80)
(20, 70, 90)
(100, 100, 10)
minimo que permita obtener el valor mínimo de un vector numérico. No puede usar ninguna de las funciones básicas de R como which.min(), which.max(), order(), min( ), max( ), sort( ) u order( ). Use la estructura mostrada abajo.minimo <- function(x) {
...
...
return(minimo)
}
Suponga un vector de cantidad de clientes atendidos en una hora por un mismo cajero durante 10 dias (suponga misma hora de antencion, de 8 am a 9 am): 4, 5, 3, 7, 5, 5, 3, 2, 8, 3
calcularPuntoMedio que calcule las coordenadas del punto medio \(M\) entre dos puntos \(A\) y \(B\). Opcional: haga que la funcion retorne el grafico con los puntos dados y el punto medio de ellos. Vea la siguiente figura para una ilustración. ¿Cuáles cree usted que deben ser los parámetros de entrada de la función?Calcule el punto medio de los dos puntos dados en cada situacion:
\(P(1,1)\) y \(Q(2,2)\)
\(P(-1,1)\) y \(Q(-2,-2)\)
\(P(0,0)\) y \(Q(3,2)\)
\(P(1,0)\) y \(Q(3,0)\)
calcularAbsoluto que reciba como parámetro un número y devuelva su valor absoluto. Nota: en R existe una versión más general de esta función llamada abs (no la utilice para construir la funcion indicada, pero si para comprobar con los casos de testeo). Empleando las funciones calcularAbsoluto y abs obtenga los resultados para cada escenario:-3
25
-1.2
1.2
Escribe una función que se llame getPositivosNegativos, la cual reciba un vector de números y retorne una lista con los elementos positivos y los elementos negativos del vector. Genere un vector normal estandar con 125 observaciones, extraiga el vector de valores positivos y negativos (fije semilla aleatoria en 123).
Realiza una versión de la función sign, llamela calcularSigno. Esta función recibe un vector numérico y devuelve un vector del mismo tamaño que el vector original, pero con los valores 1 (valores positivos), 0 (valores 0) y -1 (valores negativos). Por ejemplo, sign(c(-4, 2, 0, 3)) devuelve el vector c(-1, 1, 0, 1). Aplique la función calcularSigno para el vector generado en el ejercicio 16.
Realiza una versión de la función any, llamela any2 que recibe como parámetro un vector de valores lógicos y devuelve un valor lógico indicando si al menos uno de los elementos del vector es TRUE. Pruebe el uso de ambas funciones sobre los siguientes vectores booleanos:
[T,F,T,T,T,F,F,T]
[F,F,F,F,F,F,F]
Donde \(T:\) es verdadero y \(F:\) es falso.
x <- c(1, 2, 5)
y <- c(5, 6, 1, 3)
union(x, y) # unión
## [1] 1 2 5 6 3
intersect(x, y) # intersección
## [1] 1 5
setdiff(x, y) # Diferencia: elementos de x que no están en y
## [1] 2
setdiff(y, x)
## [1] 6 3
setequal(x, y) # igualdad
## [1] FALSE
setequal(x, c(5, 2, 1))
## [1] TRUE
Implementa versiones de estas funciones y testee con los valores dados de \(x\) e \(y\). Sugerencia: en la implementación puedes usar el operador %in% que comprueba si un elemento está en un vector, vea el siguiente ejemplo:
2 %in% x
## [1] TRUE
c(2, 4) %in% x
## [1] TRUE FALSE
getConjuntos que calcule si un conjunto es un subconjunto de otro (es subconjunto, no es subconjunto y que calcule la diferencia simétrica, es decir, aquellos elementos que pertenecen a uno de los conjuntos, pero no a ambos a la vez, debe retornar a modo lista con el mensaje de pertencia y el vector de la diferencia simetrica.Determine para cada uno de los siguientes escenarios, si dados dos conjuntos \(A\) y \(B\), uno es subconjunto de otro y por ende su diferencia simetrica:
A={1,2,3} y B={1,2,3,4,5}
A={1,3,5,7} y B={0,2,4,6,8}
Escribe una función con nombre hallarValor que dado un valor y un vector devuelva cuántas veces se encuentra el valor en el vector. Compruebe la funcion en la que se intente dar respuesta a: cuantas veces aparece el cero en el vector \(v=(0,1,1,0,1,0,0,0,1,0,1,0,0,1)\)
Una matriz es simétrica si es cuadrada y es igual a su traspuesta. Escribe una función con nombre esCuadrada que devuelva un valor lógico indicando si una matriz es simétrica.
Compruebe si las siguientes matrices son simetricas o no:
getTimeStage que recibe como parámetro una matriz. La matriz representa los tiempos empleados por un ciclista en varias etapas. Cada fila representa una etapa. La primera columna de la matriz almacena el número de horas, la segunda columna el número de minutos y la tercera columna el número de segundos que tardó en completar la etapa. Por ejemplo, si se recibe la matriz:\[ \begin{equation} \begin{pmatrix} 2 & 30 & 50\\ 1 & 55 & 20 \end{pmatrix} \end{equation} \]
El ciclista ha completado dos etapas. En la primera etapa ha tardado 2 horas, 30 minutos y 50 segundos. La función debe devolver una lista con el número total de horas, minutos y segundos empleados por el ciclista en cubrir el total de etapas. Para los datos de ejemplo se devolvería 4 horas, 26 minutos y 10 segundos.
Considere los tiempos de Vingegaard en las primeras 5 etapas del tour de francia:
Etapa 1: 2 h; 27 min; 38 segundos
Etapa 2: 1 h; 54 min; 01 segundos
Etapa 3: 3 h; 18 min; 44 segundos
Etapa 4: 0 h; 35 min; 19 segundos
Etapa 5: 1 h; 55 min; 55 segundos
Devuelva el total de horas acumuladas en las primeras 5 etapas.
Función que inicie la matriz. Inicialmente todos los asientos deben estar libres.
Función que muestre en la pantalla la ocupación de la sala.
Función que devuelva cuántos asientos libres hay en la sala.
Función que dado un número de entradas devuelva un vector con los números de las filas en que existe, como mínimo, ese número de asientos libres.
Función que dado un número de fila y un entero positivo \(n\) reserve \(n\)asientos en la fila especificada. Devuelve un vector con los números de los asientos reservados. Puedes suponer que el número de fila es correcto y que la fila contiene esa cantidad de asientos libres.
Función que dado un entero positivo \(n\) reserve \(n\) asientos en la sala. Si no existen \(n\) asientos en la sala no se debe reservar ninguno. Devuelve un vector con los números de los asientos reservados.
Escribe un programa que solicite cantidades de entradas. Si la cantidad de entradas es mayor a la cantidad de asientos libres indíquelo en la pantalla. Si es menor o igual reserve esas entradas. Proceda solicitando cantidades de entradas y reservando hasta que no haya entradas libres en la sala o se introduzca una cantidad de entradas negativa. Reserve entradas de la siguiente forma:
Si es posible albergar todas las entradas en la misma fila, reserve la fila de mayor numeración con capacidad para albergar el número de entradas solicitadas.
En otro caso obtenga los asientos de cualquier lugar disponible.
Cada vez que se reserven entradas muestre los números de entradas reservadas y la ocupación global de la sala. Por ejemplo:
1: L L L L L L L L L
2: L L L L L L L L L
3: L L L L L L L L L
4: L L L L L L L L L
5: L L L L L L L L L
6: L L L L L L L L L
7: L L L L L L L L L
8: L L L L L L L L L
9: L L L L L L L L L
Cantidad de entradas: 8
Asientos reservados: [91, 92, 93, 94, 95, 96, 97, 98]
1: L L L L L L L L L
2: L L L L L L L L L
3: L L L L L L L L L
4: L L L L L L L L L
5: L L L L L L L L L
6: L L L L L L L L L
7: L L L L L L L L L
8: L L L L L L L L L
9: O O O O O O O O L
Cantidad de entradas: 11
Asientos reservados: [99, 81, 82, 83, 84, 85, 86, 87, 88, 89, 71]
1: L L L L L L L L L
2: L L L L L L L L L
3: L L L L L L L L L
4: L L L L L L L L L
5: L L L L L L L L L
6: L L L L L L L L L
7: O L L L L L L L L
8: O O O O O O O O O
9: O O O O O O O O O
Cantidad de entradas: