Hola,
Se me pasó comentarte que para este caso, no veo forma de eliminar el bucle.
De todas formas, por ver si tú que conoces lo que buscas solucionar, mira
si la función "Vectorize()" te pudiera optimizar un tanto el código...
Saludos,
Carlos Ortega
www.qualityexcellence.es
El 18 de agosto de 2016, 15:42, Sebastian Kruk <residuo.solow en
gmail.com>
escribió:
> Hola Carlos.
> Lo que pasa es que yo parto de la situación inicial y con esos datos voy
> generando los datos en forma encadenada.
> En verdad el script que mandé está simplificado.
> Cada individuo le pide prestado en cada período al individuo de mayores
> ingresos y el de mayores ingresos incrementa sus ingresos por las deudas de
> los demás individuos.
> Espero si el otro mail que mande con el nuevo script se entienda más.
> Saludos,
> Sebastián.
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 15 Aug 2016 21:13:31 +0200
> From: Carlos Ortega <cof en qualityexcellence.es>
> To: Sebastián Kruk <residuo.solow en gmail.com>
> Cc: Lista R <r-help-es en r-project.org>
> Subject: Re: [R-es] Eliminar for de multiplicación de matriz
> Message-ID:
> <CAOKbq8io+n6rX9GEH09dfT86cBBU-yFPkESAYR0MfAiqXSUPkg en mail.gm
> ail.com>
> Content-Type: text/plain; charset="UTF-8"
>
>
> Hola,
>
> Puedes hacerlo con data.table, salvo el detalle del "if".
> Suponiendo que tu data.frame es de esta forma:
>
> tu_df <- data.frame(
> hrs_trab = ... ,
> coste_hr = ....,
> deuda =....,
> periodo >
)
>
> Mencionas hacer una agrupación por "período" pero no lo incluyes
en tu
> bucle.
> Dependiendo del tipo de este periodo si es una fecha, mes, semana, etc.
> habría que detallarlo un poco más.
> Pero con esa estructura con data.table es bastante inmediato:
>
> library(data.table
> tu_dt <- as.data.table(tu_df)
> tu_dt[ , Ingreso := hrs_trab * coste_hr - deuda, by="periodo"]
>
>
> Y para el "if", lo que haces en el bucle es sumar 1000 unidades
cuando el
> valor es negativo.
> No sé si te valdría si al final del cálculo del data.table anterior, al
> valor negativo de "Ingreso" le sumaras las 1000 unidades de esta
forma:
>
> tu_dt$Ingreso <- ifelse(tu_dt$Ingreso < 0 , tu_dt$Ingreso + 1000,
> tu_dt$Ingreso)
>
> Para acertar algo más a la primera, convendría que para este tipo de casos,
> incluyeras una parte de la matriz/data.frame con el que trabajas...
>
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
> El 16 de agosto de 2016, 07:00, <r-help-es-request en r-project.org>
> escribió:
>
>> Envíe los mensajes para la lista R-help-es a
>> r-help-es en r-project.org
>>
>> Para subscribirse o anular su subscripción a través de la WEB
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>> O por correo electrónico, enviando un mensaje con el texto
"help" en
>> el asunto (subject) o en el cuerpo a:
>> r-help-es-request en r-project.org
>>
>> Puede contactar con el responsable de la lista escribiendo a:
>> r-help-es-owner en r-project.org
>>
>> Si responde a algún contenido de este mensaje, por favor, edite la
>> linea del asunto (subject) para que el texto sea mas especifico que:
>> "Re: Contents of R-help-es digest...". Además, por favor,
incluya en
>> la respuesta sólo aquellas partes del mensaje a las que está
>> respondiendo.
>>
>>
>> Asuntos del día:
>>
>> 1. Re: Eliminar for de multiplicación de matriz (Carlos Ortega)
>> 2. inscrición (Boanerge salas muñoz)
>> 3. Re: inscrición (javier.ruben.marcuzzi en gmail.com)
>>
>>
>> ----------------------------------------------------------------------
>>
>> Message: 1
>> Date: Mon, 15 Aug 2016 21:13:31 +0200
>> From: Carlos Ortega <cof en qualityexcellence.es>
>> To: Sebastián Kruk <residuo.solow en gmail.com>
>> Cc: Lista R <r-help-es en r-project.org>
>> Subject: Re: [R-es] Eliminar for de multiplicación de matriz
>> Message-ID:
>> <CAOKbq8io+n6rX9GEH09dfT86cBBU-yFPkESAYR0MfAiqXSUPkg en
mail.gm
>> ail.com>
>> Content-Type: text/plain; charset="UTF-8"
>>
>>
>> Hola,
>>
>> Puedes hacerlo con data.table, salvo el detalle del "if".
>> Suponiendo que tu data.frame es de esta forma:
>>
>> tu_df <- data.frame(
>> hrs_trab = ... ,
>> coste_hr = ....,
>> deuda =....,
>> periodo >>
)
>>
>> Mencionas hacer una agrupación por "período" pero no lo
incluyes en tu
>> bucle.
>> Dependiendo del tipo de este periodo si es una fecha, mes, semana, etc.
>> habría que detallarlo un poco más.
>> Pero con esa estructura con data.table es bastante inmediato:
>>
>> library(data.table
>> tu_dt <- as.data.table(tu_df)
>> tu_dt[ , Ingreso := hrs_trab * coste_hr - deuda,
by="periodo"]
>>
>>
>> Y para el "if", lo que haces en el bucle es sumar 1000
unidades cuando el
>> valor es negativo.
>> No sé si te valdría si al final del cálculo del data.table anterior, al
>> valor negativo de "Ingreso" le sumaras las 1000 unidades de
esta forma:
>>
>> tu_dt$Ingreso <- ifelse(tu_dt$Ingreso < 0 , tu_dt$Ingreso + 1000,
>> tu_dt$Ingreso)
>>
>> Para acertar algo más a la primera, convendría que para este tipo de
>> casos,
>> incluyeras una parte de la matriz/data.frame con el que trabajas...
>>
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> El 14 de agosto de 2016, 14:00, Sebastián Kruk <residuo.solow en
gmail.com>
>> escribió:
>>
>> > Estimados usuarios de R:
>> >
>> > Yo tengo una matriz en que cada fila es una persona y las filas
>> > corresponden al ingreso, horas trabajadas, salario por hora y
deudas.
>> >
>> > El ingreso es igual a las horas trabajadas por el salario por hora
menos
>> > deudas.
>> >
>> > Me interesa guardar por individuo por cada período el ingreso.
>> >
>> > Yo hacía:
>> >
>> > for t in 2:200 {
>> > for i in 1 in 1:10 {
>> > M[i,Y]=M[i,S]*M[i,H]-M[i,D]+M[i,Y]
>> > if M[i,Y]<1000 {
>> > M[i,D] = 1000 + M[i,D]
>> > }
>> > }
>> > Ing[t]=M[,Y]
>> > }
>> >
>> > En lo anterior Y es ingreso, H son las horas trabajadas, S es el
>> salario y
>> > D las deudas.
>> >
>> > ¿Hay alguna forma de optimizarlo eliminando los for y el if?
>> >
>> > Desde ya muchas gracias.
>> >
>> > Sebastián.
>> > [[alternative HTML version deleted]]
>> >
>> >
>> > _______________________________________________
>> > R-help-es mailing list
>> > R-help-es en r-project.org
>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>> >
>>
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> [[alternative HTML version deleted]]
>>
>>
>>
>> ------------------------------
>>
>> Message: 2
>> Date: Mon, 15 Aug 2016 15:26:58 -0500
>> From: Boanerge salas muñoz <boanergesalas en gmail.com>
>> To: r-help-es en r-project.org
>> Subject: [R-es] inscrición
>> Message-ID:
>> <CA++h-ueHMDNApy8uazgZQP9NT+ffKpekLs8UR_GDL2QDyxwy8Q en
mail.gm
>> ail.com>
>> Content-Type: text/plain; charset="UTF-8"
>>
>> Cordial saludo, deseo inscribirme
>>
>> --
>> Boanerge salas muñoz
>>
>> 3014738660
>>
>> [[alternative HTML version deleted]]
>>
>>
>>
>> ------------------------------
>>
>> Message: 3
>> Date: Mon, 15 Aug 2016 17:48:03 -0300
>> From: <javier.ruben.marcuzzi en gmail.com>
>> To: Boanerge salas muñoz <boanergesalas en gmail.com>,
>> "r-help-es en r-project.org" <r-help-es en
r-project.org>
>> Subject: Re: [R-es] inscrición
>> Message-ID: <57b22a83.2d3ced0a.7e847.4396 en mx.google.com>
>> Content-Type: text/plain; charset="UTF-8"
>>
>> Estimado Boanerge Salas Muñoz
>>
>> Su mensaje sale en la lista de R-es, si usted deseaba inscribirse ya
está
>> en la lista.
>>
>> Javier Rubén Marcuzzi
>>
>> De: Boanerge salas muñoz
>> [[alternative HTML version deleted]]
>>
>>
>>
>> ------------------------------
>>
>> Subject: Pié de página del digest
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>> ------------------------------
>>
>> Fin de Resumen de R-help-es, Vol 90, Envío 18
>> *********************************************
>>
>
>
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]