[R-es] Depuración de código
Isidro Hidalgo Arellano
|h|d@|go @end|ng |rom jccm@e@
Mie Feb 7 09:19:59 CET 2024
Hola,
Esto podría simplificar un poco la parte inicial:
# Creamos data_frame de cantidad y utilidad
P1 <- data.frame(
Cantidad= 0:10,
UtilidadA = c(0,15,28,35,40,45,49,53,55,56,56),
UtilidadB = c(0,17,30,37,42,47,51,55,57,58,58)
) # No uses comillas y cárgalos directamente como numéricos
# Creamos variables de precio y límite presupuestario
PrecioA <- 12
PrecioB <- 16
L_prep <- 90
# cambiamos clase # Te lo ahorras porque ya los has cargado como numéricos
# Creamos vector de gasto en producto A # R trabaja vectorialmente, no necesitas un bucle
Gasto_PA <- round((P1$Cantidad * PrecioA), digits = 0)
# Creamos vector de unidades B con relación a A
CestaB <- floor((L_prep-Gasto_PA)/PrecioB) # Lo mismo
# Por otro lado, usa floor(), para que te coja el valor entero por abajo, asegurándote de que no vas a exceder el presupuesto
El resto, salvo alguna cosa sin importancia, tiene sentido como lo haces...
Un saludo,
Isidro Hidalgo Arellano
Observatorio del Mercado de Trabajo
Junta de Comunidades de Castilla – La Mancha
-----Mensaje original-----
De: R-help-es <r-help-es-bounces using r-project.org> En nombre de Clei Y
Enviado el: miércoles, 7 de febrero de 2024 2:28
Para: R-help-es using r-project.org
Asunto: [R-es] Depuración de código
Hola a todos
Empleando mis limitados conocimientos de R pude resolver un ejercicio elaborando un c�digo, estoy seguro que se puede simplificar, si alguien tiene alg�n tiempo libre agradecer�a me pudiera ayudar depurando el c�digo, lo adjunto junto con unas tablas que representan el inicio y final.
El ejercicio consiste en calcular la cantidad ideal de los Productos A y B, considerando su precio, el l�mite presupuestario y la utilidad que representan.
Saludos.
### Creamos data_frame de cantidad y utilidad ###
P1 <- data.frame(
"Cantidad"= 0:10,
"UtilidadA" = c("0","15","28","35","40","45","49","53","55","56","56"),
"UtilidadB" = c("0","17","30","37","42","47","51","55","57","58","58"))
Q
UtilidadA
UtilidadB
0
0
0
1
15
17
2
28
30
3
35
37
4
40
42
5
45
47
6
49
51
7
53
55
8
55
57
9
56
58
10
56
58
### Creamos variables de precio y l�mite presupuestario ###
PrecioA <- 12
PrecioB <- 16
L_prep <- 90
### cambiamos clase ###
P1$UtilidadA <- as.numeric(P1$UtilidadA)
P1$UtilidadB <- as.numeric(P1$UtilidadB)
### Creamos vector de gasto en producto A ###
Gasto_PA <- numeric(length(P1$Cantidad))
for(i in 1:length(P1$Cantidad)){
Gasto_PA[i] <- round((P1$Cantidad[i] *PrecioA),digits = 0)
}
### Creamos vector de unidades B con relaci�n a A ###
CestaB <- numeric(length(Gasto_PA))
for (i in 1:length(Gasto_PA)) {
CestaB[i] <- round(((L_prep-Gasto_PA[i])/PrecioB),digits = 0)
}
### Creamos vector de utilidad total ###
library(dplyr)
## Del primer data frame obtenemos cantidad y utilidad de B ###
> P2 <- data.frame(P1$Cantidad, P1$UtilidadB)
## Del primer data frame obtenemos cantidad y utilidad de A ###
p3 <- select(P1,Cantidad,UtilidadA)
## Cambiamos nombre de columnas y tipo para unir data_frame ##
CestaB <- data.frame(CestaB)
colnames(CestaB)[1] <- "P1.Cantidad"
## Unimos Unidades de B con su utilidad manteniendo el orden ##
P4 <- merge.data.frame(x=CestaB, y=P2, all.x = TRUE, sort = F)
## Unimos data frame de cantidad y utilidad de A con cantidad y utilidad de B ##
P5 <- cbind(p3,P4)
## Renombramos columnas ##
colnames(P5)[1] <- "CantidadA"
colnames(P5)[3] <- "CantidadB"
colnames(P5)[4] <- "UtilidadB"
## Creamos columna de utilidad total ##
## Este data frame muestra las combinaciones de A y B que se pueden adquirir con el l�mite presupuestario y la utilidad##
P5$Utilidad_Total <- P5$UtilidadA+P5$UtilidadB
CantidadA
UtilidadA
CantidadB
UtilidadB
Utilidad_Total
0
0
5
47
47
1
15
4
42
57
2
28
4
42
70
3
35
3
37
72
4
40
2
30
70
5
45
1
17
62
6
49
1
17
66
7
53
0
0
53
8
55
0
0
55
9
56
-1
NA
NA
10
56
-1
NA
NA
## Identificamos utilidad total m�xima ##
utilidad_max <- which.max(P5$Utilidad_Total)
## Creamos data frame con combinaci�n de A y B que entrega utilidad m�xima ##
fila_max <- P5[utilidad_max, ]
print(fila_max)
class(fila_max)
## Este data frame ser�a la salida en ShinyApp ##
Gracias y saludos
Cleiver Yam
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es