Estimados Julio, Javier Villacampa, Fernando y Javier Marcuzzi,

Es indudable que los for() han sido comentados extensamente en esta y otras
listas, y que la preferencia ha sido, en ciertos escenarios, trabajar con
las funciones *apply.  Sin embargo, los for() no son del todo tan
ineficientes como muchos piensan (o pensaban, me incluyo), y todo depende
de como comience el proceso (para algunas ideas ver "Circle 2" en "R
Inferno" de Patrick Burns).

La ventaja de usar *apply frente a los for() es que, en general, se
encargan de darle formato al objeto resultante.  Por el contrario, con los
for() hay que trabajar un poco mas "antes de" comenzar a trabajar.

Personalmente que esta discusion es muy productiva y podria dejarnos muchas
enseñanzas, sobretodo a aquellos que recien comienzan con R. Como otros han
dicho, la vectorizacion de funciones es deseable, pero desafortunadamente a
veces toma mas tiempo crear esa funcion que esperar a que termine el for().

Quizas no sea el mejor ejemplo, pero he aqui una pequeña comparacion:

# numero de muestras
B <- 1000

# ---------------------------------------
# generacion de B muestras de
# tamaño B de una N(0,1)
# ---------------------------------------

# creando el objeto "antes de"
set.seed(123)
r1 <- vector("list", B)
system.time({
    for(i in 1:B) r1[[i]] <- rnorm(i)
    })

# creando el objeto "on the fly"
set.seed(123)
system.time(r2 <- lapply(1:B, rnorm))

# usando replicate()
set.seed(123)
system.time(r3 <- lapply(1:B, function(b) rnorm(b)))

# iguales?
all.equal(r1, r2)
all.equal(r2, r3)
all.equal(r1, r3)

Saludos,
Jorge.-


2012/6/12 Julio Alejandro Di Rienzo <>

> Fernando
>
> Los loops basados en FOR son muy ineficientes en R.
> Casi siempre pueden ser substituidos aplicando las funciones apply, lapply,
> sapply... que mejoran dramaticamente la performance.
>
> Prof. Julio Di Rienzo
> Estadística y Biometría
> FCA- U.N. Córdoba
> IBS-RARG President
> http://sites.google.com/site/juliodirienzo
> "Biometry, the active pursuit of biological
> knowledge by quantitative methods."
> (R.A. Fisher, 1948)
>
>
>
> 2012/6/12 Fernando Fernández <>
>
> > Vaya Javier,
> >
> > No estaba al tanto de que se estaba trabajando en un compilador. Tiene
> muy
> > buena pinta como solución intermedia a programar en C directamente!!
> >
> >
> >
> > El 12 de junio de 2012 15:33, Marcuzzi, Javier Rubén <
> > <javier.ruben.marcuzzi@gmail.com>> escribió:
> >
> > > Estimado González
> > >
> > > Si. Compilando. Yo realicé una prueba muy sencilla es es mucho más
> veloz,
> > > claro, esta posibilidad existe en la última versión de R.
> > >
> > > Javier Marcuzzi
> > >
> > > -----Mensaje original----- From: Javier Villacampa González
> > > Sent: Tuesday, June 12, 2012 9:32 AM
> > > To: r-help-es@r-project.org
> > > Subject: [R-es] help: Bucles rápidos en R
> > >
> > >
> > > Buenas días a todos,
> > >
> > > una vez más os escribo para preguntaros una duda. Estoy haciendo bucles
> > con
> > > data frames, el problema es que al hacer bucles de esta manera el
> sistema
> > > se relentiza. He buscado por internet y en varias web te dicen que
> evites
> > > los bucles en la medida de lo posible y que intentes funcionar con c++
> > con
> > > la librería Rccp
> http://cran.r-project.org/web/**packages/Rcpp/Rcpp.pdf<
> > http://cran.r-project.org/web/packages/Rcpp/Rcpp.pdf>
> > > .
> > >
> > > Mi preguta es
> > > 1 Se puede acelerar el proceso dentro de R si irme a otro lenguaje
> > > 2  Alguna página con ejemplitos fáciles de Rccp.
> > >
> > > Como ya veis tengo la duda a medio madurar, pero si me podeis dar un
> > > empujón os lo agradeceré.
> > >
> > > Un saludo y gracias por adelantado.
> > >
> > > [[alternative HTML version deleted]]
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ______________________________**_________________
> > > R-help-es mailing list
> > > R-help-es@r-project.org
> > > https://stat.ethz.ch/mailman/**listinfo/r-help-es<
> > https://stat.ethz.ch/mailman/listinfo/r-help-es>
> > >
> > > ______________________________**_________________
> > > R-help-es mailing list
> > > R-help-es@r-project.org
> > > https://stat.ethz.ch/mailman/**listinfo/r-help-es<
> > https://stat.ethz.ch/mailman/listinfo/r-help-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]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>

	[[alternative HTML version deleted]]

