[R-es] Depuración de código

Carlos J. Gil Bellosta g||be||o@t@ @end|ng |rom gm@||@com
Mie Feb 7 11:23:07 CET 2024


Prueba algo así:

##############

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

PrecioA <- 12
PrecioB <- 16
L_prep <- 90

out <- expand.grid(cant_a = 0:10, cant_b = 0:10)

out <- merge(out, P1[, c("Cantidad", "UtilidadA")], by.x = "cant_a", by.y=
"Cantidad")
out <- merge(out, P1[, c("Cantidad", "UtilidadB")], by.x = "cant_b", by.y=
"Cantidad")

out$utilidad <- out$UtilidadA + out$UtilidadB
out$precio <- out$cant_a * PrecioA + out$cant_b * PrecioB

out <- out[out$precio <= L_prep,]
out <- out[order(out$utilidad),]
tail(out, 1)

##############

Se puede hacer mejor, pero es lo suficientemente bueno.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com


El mié, 7 feb 2024 a las 2:28, Clei Y (<cleiver_yam using hotmail.com>) escribió:

> 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]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es