Carlos, es usted muy amable, pero veo que es un poco mas complejo de lo que usted me ha ayudado, aunque me sirve mucho para la siguiente parte del programa. El problema en cuestión, no es vectorizar, los 20 resultados de las muestras aleatoria de distribución normal, y lo mas probable es que no sepa plantear mi problema. Lo que requiero es lo siguiente: La secuencia que hago me genera 20 valores y en las columnas quiero que aparezcan en orden ascendente, el numero ''i'' de la repetcion, y los dos valores de por decirlo así los promedios que definí como T1 y T3 respectivamente. i T1 T3 [1] 8 31.1867860202239 27.8074224110316 uno de los resultados al correrlo es el anterios, pero no puedo guardarlo automaticamente como un vector, el unico que guarda es el ultimo el valor 20, y requiero guardar como asignacion de variable, todos los valores resultantes. Muchisimas gracias El 24 de agosto de 2012 02:40, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola, > > Si he entendido bien lo que dices, en R se puede hacer de forma más fácil > utilizando su capacidad de "vectorizar". > > De esta forma consigues tener en una matriz "mi.mat" las 20 muestras > aleatorias. > > > set.seed(1234567) > mi.mat<-matrix(rep(rnorm(5,30, 1.5), 20), nrow=4, ncol=5) > > > mi.mat > [,1] [,2] [,3] [,4] [,5] > [1,] 30.23506 29.98723 27.97380 31.09601 32.06072 > [2,] 32.06072 30.23506 29.98723 27.97380 31.09601 > [3,] 31.09601 32.06072 30.23506 29.98723 27.97380 > [4,] 27.97380 31.09601 32.06072 30.23506 29.98723 > > > ¿Cuál es el problema con tu aproximación?. > Pues básicamente que en cada ciclo de tu bucle while, el valor de Y se > actualiza. > Para poder obtener una matrix con diferentes filas deberías de haber > utilizado algún tipo de índice sobre ella, del tipo Y[i,]=.... > Pero vaya, es más compacto y sencillo utilizar la función "rep()". > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 24 de agosto de 2012 06:28, Lex B <bernalm.alexander@gmail.com>escribió: > >> Buenas noches, soy nuevo en el uso de R, y se me ha presentado una duda >> grande supongo que debe ser sencillo para mi nivel. >> >> lo que intento es generar 20 muestras aleatoria con distribución normal, y >> que los valores generados queden asignados en vectores, yo he intentado >> crear la siguiente secuencia pero me genera los datos como vectores >> independiente cada uno y de unica entrada, pero requiero que cada uno sea >> un vector de 3 entradas y poder manipularlos para crcear una matriz con >> ellos, la secuencia que hice fue: >> >> m=30 >> desv=1.5 >> i = 0 >> while(i<20){ >> i = i +1 >> X=rnorm(5,m,desv) >> f=c("X1","X2","X3","X4","X5") >> Y=matrix(X, ncol = 5) >> colnames(Y) = f >> T1 = 1/5*sum(Y[1,]) >> T3 = 1/10*(Y[,1] + 2*Y[,1] + 3*Y[,1] + 2*Y[,1] + Y[,1]) >> print(noquote(paste(i, T1, T3))) >> } >> >> y al correrlo genera lo siguiente: >> >> [1] 1 29.6580044989442 28.4648427289512 >> [1] 2 29.2852281959907 25.6234115083671 >> [1] 3 30.3304891044586 27.8308812160942 >> [1] 4 30.9665429781098 28.4608524614685 >> [1] 5 28.528894567099 24.8889365719721 >> [1] 6 30.7291516512659 28.0183321321513 >> [1] 7 31.3888326565555 27.9144795179306 >> [1] 8 31.1867860202239 27.8074224110316 >> [1] 9 30.6939126562443 27.3203264151207 >> [1] 10 30.0426023962733 27.4697502868791 >> [1] 11 31.3978479842576 27.1130006605964 >> [1] 12 29.6660619654119 25.5787390791236 >> [1] 13 29.6483876437844 26.946598898624 >> [1] 14 30.6974869678901 27.4884828509993 >> [1] 15 29.6428162823001 26.6229445858976 >> [1] 16 30.0978518730352 26.942477830931 >> [1] 17 29.5552471077553 28.9035426270582 >> [1] 18 30.3459851908247 26.0684050682985 >> [1] 19 29.8992368156068 26.5401031908471 >> [1] 20 30.133280269122 27.32660356603 >> >> debo seguir usando while, o debo usar algun metodo mas efectivo? >> >> -- >> >> ALEXANDER BERNAL MUÑOZ >> U SANTO TOMAS - ESTADÍSTICA - BOGOTÁ >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >-- ALEXANDER BERNAL MUÑOZ U SANTO TOMAS - ESTADÍSTICA - BOGOTÁ [[alternative HTML version deleted]]
Hola, De esta forma funciona. ############################### m=30 desv=1.5 i = 0 df<-data.frame(i, T1, T3) while(i<20){ i = i +1 X=rnorm(5,m,desv) f=c("X1","X2","X3","X4","X5") Y=matrix(X, ncol = 5) colnames(Y) = f T1 = 1/5*sum(Y[1,]) T3 = 1/10*(Y[,1] + 2*Y[,1] + 3*Y[,1] + 2*Y[,1] + Y[,1]) print(noquote(paste(i, T1, T3))) df[i,1]<-i df[i,2]<-T1 df[i,3]<-T3 } df ############################### Lo que tampoco entiendo es el valor de T3. Realmente estás sumando el mismo elemento Y[,1] nueves veces, no tienes porqué sacar factor común con 1/10*(Y[,1].... basta con que T3 sea: T3= 1/10* 9. Y[,1] salvo que te hayas equivocado y no siempre sea el índice "1" en todos los sumandos... Saludos, Carlos Ortega www.qualityexcellence.es El 24 de agosto de 2012 13:21, Lex B <bernalm.alexander@gmail.com> escribió:> Carlos, es usted muy amable, pero veo que es un poco mas complejo de lo > que usted me ha ayudado, aunque me sirve mucho para la siguiente parte del > programa. > El problema en cuestión, no es vectorizar, los 20 resultados de las > muestras aleatoria de distribución normal, y lo mas probable es que no sepa > plantear mi problema. > > Lo que requiero es lo siguiente: > > La secuencia que hago me genera 20 valores y en las columnas quiero que > aparezcan en orden ascendente, el numero ''i'' de la repetcion, y los dos > valores de por decirlo así los promedios que definí como T1 y T3 > respectivamente. > i T1 T3 > [1] 8 31.1867860202239 27.8074224110316 > > uno de los resultados al correrlo es el anterios, pero no puedo guardarlo > automaticamente como un vector, el unico que guarda es el ultimo el valor > 20, y requiero guardar como asignacion de variable, todos los valores > resultantes. > > Muchisimas gracias > > El 24 de agosto de 2012 02:40, Carlos Ortega <cof@qualityexcellence.es>escribió: > >> Hola, >> >> Si he entendido bien lo que dices, en R se puede hacer de forma más fácil >> utilizando su capacidad de "vectorizar". >> >> De esta forma consigues tener en una matriz "mi.mat" las 20 muestras >> aleatorias. >> >> >> set.seed(1234567) >> mi.mat<-matrix(rep(rnorm(5,30, 1.5), 20), nrow=4, ncol=5) >> >> > mi.mat >> [,1] [,2] [,3] [,4] [,5] >> [1,] 30.23506 29.98723 27.97380 31.09601 32.06072 >> [2,] 32.06072 30.23506 29.98723 27.97380 31.09601 >> [3,] 31.09601 32.06072 30.23506 29.98723 27.97380 >> [4,] 27.97380 31.09601 32.06072 30.23506 29.98723 >> >> >> ¿Cuál es el problema con tu aproximación?. >> Pues básicamente que en cada ciclo de tu bucle while, el valor de Y se >> actualiza. >> Para poder obtener una matrix con diferentes filas deberías de haber >> utilizado algún tipo de índice sobre ella, del tipo Y[i,]=.... >> Pero vaya, es más compacto y sencillo utilizar la función "rep()". >> >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> >> El 24 de agosto de 2012 06:28, Lex B <bernalm.alexander@gmail.com>escribió: >> >>> Buenas noches, soy nuevo en el uso de R, y se me ha presentado una duda >>> grande supongo que debe ser sencillo para mi nivel. >>> >>> lo que intento es generar 20 muestras aleatoria con distribución normal, >>> y >>> que los valores generados queden asignados en vectores, yo he intentado >>> crear la siguiente secuencia pero me genera los datos como vectores >>> independiente cada uno y de unica entrada, pero requiero que cada uno sea >>> un vector de 3 entradas y poder manipularlos para crcear una matriz con >>> ellos, la secuencia que hice fue: >>> >>> m=30 >>> desv=1.5 >>> i = 0 >>> while(i<20){ >>> i = i +1 >>> X=rnorm(5,m,desv) >>> f=c("X1","X2","X3","X4","X5") >>> Y=matrix(X, ncol = 5) >>> colnames(Y) = f >>> T1 = 1/5*sum(Y[1,]) >>> T3 = 1/10*(Y[,1] + 2*Y[,1] + 3*Y[,1] + 2*Y[,1] + Y[,1]) >>> print(noquote(paste(i, T1, T3))) >>> } >>> >>> y al correrlo genera lo siguiente: >>> >>> [1] 1 29.6580044989442 28.4648427289512 >>> [1] 2 29.2852281959907 25.6234115083671 >>> [1] 3 30.3304891044586 27.8308812160942 >>> [1] 4 30.9665429781098 28.4608524614685 >>> [1] 5 28.528894567099 24.8889365719721 >>> [1] 6 30.7291516512659 28.0183321321513 >>> [1] 7 31.3888326565555 27.9144795179306 >>> [1] 8 31.1867860202239 27.8074224110316 >>> [1] 9 30.6939126562443 27.3203264151207 >>> [1] 10 30.0426023962733 27.4697502868791 >>> [1] 11 31.3978479842576 27.1130006605964 >>> [1] 12 29.6660619654119 25.5787390791236 >>> [1] 13 29.6483876437844 26.946598898624 >>> [1] 14 30.6974869678901 27.4884828509993 >>> [1] 15 29.6428162823001 26.6229445858976 >>> [1] 16 30.0978518730352 26.942477830931 >>> [1] 17 29.5552471077553 28.9035426270582 >>> [1] 18 30.3459851908247 26.0684050682985 >>> [1] 19 29.8992368156068 26.5401031908471 >>> [1] 20 30.133280269122 27.32660356603 >>> >>> debo seguir usando while, o debo usar algun metodo mas efectivo? >>> >>> -- >>> >>> ALEXANDER BERNAL MUÑOZ >>> U SANTO TOMAS - ESTADÍSTICA - BOGOTÁ >>> >>> [[alternative HTML version deleted]] >>> >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es@r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >>> >> >> >> -- >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> > > > > -- > > ALEXANDER BERNAL MUÑOZ > U SANTO TOMAS - ESTADÍSTICA - BOGOTÁ > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, con un vector tan chico casi no se va a notar. Pero están haciendo que el data.frame crezca en cada iteración. Es más eficiente crear el data.frame del tamaño deseado y después ir llenandolo. ############################### m=30 desv=1.5 i = 0 n = 20 df<-data.frame(i = rep(NA, n), T1 = rep(NA, n), T3 = rep(NA, n)) while(i<n){ i = i +1 X=rnorm(5,m,desv) f=c("X1","X2","X3","X4","X5") Y=matrix(X, ncol = 5) colnames(Y) = f T1 = 1/5*sum(Y[1,]) T3 = 1/10*(Y[,1] + 2*Y[,1] + 3*Y[,1] + 2*Y[,1] + Y[,1]) print(noquote(paste(i, T1, T3))) df[i, ]<- cbind(i, T1, T3) } df ############################### Luciano El 24 de agosto de 2012 08:54, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola, > > De esta forma funciona. > > ############################### > > m=30 > desv=1.5 > i = 0 > df<-data.frame(i, T1, T3) > while(i<20){ > i = i +1 > X=rnorm(5,m,desv) > f=c("X1","X2","X3","X4","X5") > Y=matrix(X, ncol = 5) > colnames(Y) = f > T1 = 1/5*sum(Y[1,]) > T3 = 1/10*(Y[,1] + 2*Y[,1] + 3*Y[,1] + 2*Y[,1] + Y[,1]) > print(noquote(paste(i, T1, T3))) > df[i,1]<-i > df[i,2]<-T1 > df[i,3]<-T3 > } > > df > > ############################### > > > Lo que tampoco entiendo es el valor de T3. Realmente estás sumando el mismo > elemento Y[,1] nueves veces, no tienes porqué sacar factor común con > 1/10*(Y[,1].... basta con que T3 sea: > > T3= 1/10* 9. Y[,1] > > salvo que te hayas equivocado y no siempre sea el índice "1" en todos los > sumandos... > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 24 de agosto de 2012 13:21, Lex B <bernalm.alexander@gmail.com> > escribió: > > > Carlos, es usted muy amable, pero veo que es un poco mas complejo de lo > > que usted me ha ayudado, aunque me sirve mucho para la siguiente parte > del > > programa. > > El problema en cuestión, no es vectorizar, los 20 resultados de las > > muestras aleatoria de distribución normal, y lo mas probable es que no > sepa > > plantear mi problema. > > > > Lo que requiero es lo siguiente: > > > > La secuencia que hago me genera 20 valores y en las columnas quiero que > > aparezcan en orden ascendente, el numero ''i'' de la repetcion, y los dos > > valores de por decirlo así los promedios que definí como T1 y T3 > > respectivamente. > > i T1 T3 > > [1] 8 31.1867860202239 27.8074224110316 > > > > uno de los resultados al correrlo es el anterios, pero no puedo guardarlo > > automaticamente como un vector, el unico que guarda es el ultimo el valor > > 20, y requiero guardar como asignacion de variable, todos los valores > > resultantes. > > > > Muchisimas gracias > > > > El 24 de agosto de 2012 02:40, Carlos Ortega <cof@qualityexcellence.es > >escribió: > > > >> Hola, > >> > >> Si he entendido bien lo que dices, en R se puede hacer de forma más > fácil > >> utilizando su capacidad de "vectorizar". > >> > >> De esta forma consigues tener en una matriz "mi.mat" las 20 muestras > >> aleatorias. > >> > >> > >> set.seed(1234567) > >> mi.mat<-matrix(rep(rnorm(5,30, 1.5), 20), nrow=4, ncol=5) > >> > >> > mi.mat > >> [,1] [,2] [,3] [,4] [,5] > >> [1,] 30.23506 29.98723 27.97380 31.09601 32.06072 > >> [2,] 32.06072 30.23506 29.98723 27.97380 31.09601 > >> [3,] 31.09601 32.06072 30.23506 29.98723 27.97380 > >> [4,] 27.97380 31.09601 32.06072 30.23506 29.98723 > >> > >> > >> ¿Cuál es el problema con tu aproximación?. > >> Pues básicamente que en cada ciclo de tu bucle while, el valor de Y se > >> actualiza. > >> Para poder obtener una matrix con diferentes filas deberías de haber > >> utilizado algún tipo de índice sobre ella, del tipo Y[i,]=.... > >> Pero vaya, es más compacto y sencillo utilizar la función "rep()". > >> > >> Saludos, > >> Carlos Ortega > >> www.qualityexcellence.es > >> > >> El 24 de agosto de 2012 06:28, Lex B <bernalm.alexander@gmail.com > >escribió: > >> > >>> Buenas noches, soy nuevo en el uso de R, y se me ha presentado una > duda > >>> grande supongo que debe ser sencillo para mi nivel. > >>> > >>> lo que intento es generar 20 muestras aleatoria con distribución > normal, > >>> y > >>> que los valores generados queden asignados en vectores, yo he intentado > >>> crear la siguiente secuencia pero me genera los datos como vectores > >>> independiente cada uno y de unica entrada, pero requiero que cada uno > sea > >>> un vector de 3 entradas y poder manipularlos para crcear una matriz con > >>> ellos, la secuencia que hice fue: > >>> > >>> m=30 > >>> desv=1.5 > >>> i = 0 > >>> while(i<20){ > >>> i = i +1 > >>> X=rnorm(5,m,desv) > >>> f=c("X1","X2","X3","X4","X5") > >>> Y=matrix(X, ncol = 5) > >>> colnames(Y) = f > >>> T1 = 1/5*sum(Y[1,]) > >>> T3 = 1/10*(Y[,1] + 2*Y[,1] + 3*Y[,1] + 2*Y[,1] + Y[,1]) > >>> print(noquote(paste(i, T1, T3))) > >>> } > >>> > >>> y al correrlo genera lo siguiente: > >>> > >>> [1] 1 29.6580044989442 28.4648427289512 > >>> [1] 2 29.2852281959907 25.6234115083671 > >>> [1] 3 30.3304891044586 27.8308812160942 > >>> [1] 4 30.9665429781098 28.4608524614685 > >>> [1] 5 28.528894567099 24.8889365719721 > >>> [1] 6 30.7291516512659 28.0183321321513 > >>> [1] 7 31.3888326565555 27.9144795179306 > >>> [1] 8 31.1867860202239 27.8074224110316 > >>> [1] 9 30.6939126562443 27.3203264151207 > >>> [1] 10 30.0426023962733 27.4697502868791 > >>> [1] 11 31.3978479842576 27.1130006605964 > >>> [1] 12 29.6660619654119 25.5787390791236 > >>> [1] 13 29.6483876437844 26.946598898624 > >>> [1] 14 30.6974869678901 27.4884828509993 > >>> [1] 15 29.6428162823001 26.6229445858976 > >>> [1] 16 30.0978518730352 26.942477830931 > >>> [1] 17 29.5552471077553 28.9035426270582 > >>> [1] 18 30.3459851908247 26.0684050682985 > >>> [1] 19 29.8992368156068 26.5401031908471 > >>> [1] 20 30.133280269122 27.32660356603 > >>> > >>> debo seguir usando while, o debo usar algun metodo mas efectivo? > >>> > >>> -- > >>> > >>> ALEXANDER BERNAL MUÑOZ > >>> U SANTO TOMAS - ESTADÍSTICA - BOGOTÁ > >>> > >>> [[alternative HTML version deleted]] > >>> > >>> > >>> _______________________________________________ > >>> R-help-es mailing list > >>> R-help-es@r-project.org > >>> https://stat.ethz.ch/mailman/listinfo/r-help-es > >>> > >>> > >> > >> > >> -- > >> Saludos, > >> Carlos Ortega > >> www.qualityexcellence.es > >> > > > > > > > > -- > > > > ALEXANDER BERNAL MUÑOZ > > U SANTO TOMAS - ESTADÍSTICA - BOGOTÁ > > > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]