[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