[R-es] ¿Pasar parámetros por referencia?

Ramon Diaz-Uriarte rdiaz02 en gmail.com
Mie Sep 28 19:40:21 CEST 2011




On Wed, 28 Sep 2011 15:40:43 +0200,Servicio de Estadísticas Demográficas y Sociales <seds.ive en gmail.com> wrote:
> [1  <text/plain; ISO-8859-1 (quoted-printable)>]
> Lo primero, muchas gracias por tus sugerencias. Voy a investigar el paquete
> ff a ver si así lo resuelvo.

Pero he visto que luego comentas que los accesos a la matriz están
escritos por otra persona. Usar ff requeriría que re-escribieras parte del
código. 


> Sobre la segunda alternativa que apuntas, ¿puede modificarse parte de una
> matriz mediante assign o alguna función similar?

Sí, claro, puedes hacer assign de lo que sea, en el environment que elijas
(entiendo que te refieres al uso de variables globales). Pero el problema
de creación de copias intermedias existe. Y en la asignación a matrices, y
operaciones como 

x[, i] <- lo.que.sea




puede haber muchas más copias intermedias de las que uno esperaría,
incluyendo copias intermedias de la totalidad de x. El último libro de
Chambers, creo, explica esto con cierto detalle.


Vaya, toquetear cachos de matrices (y vectores) suele ser caro, sobre todo
si se hace varias veces.




R.



> Saludos.
> Seds

> El 28 de septiembre de 2011 14:17, Ramon Diaz-Uriarte
> <rdiaz02 en gmail.com>escribió:

> >
> >
> >
> >
> > On Wed, 28 Sep 2011 13:53:19 +0200,Servicio de Estadísticas Demográficas y
> > Sociales <seds.ive en gmail.com> wrote:
> > > [1  <text/plain (quoted-printable)>]
> > > ¿Hay alguna manera de pasar a parámetros por referencia?
> >
> > > El problema es que tengo una matriz muy grande (unos 6 Gb) que al pasarla
> > > como parámetro a una función (que, además debe modificarla) R
> > internamente
> > > trata de copiarla y se genera un error de "imposible ubicar un vector de
> > 6
> > > Gb)
> >
> >
> > Hay varios paquetes en CRAN que implementan diversas formas de acceso por
> > referencia. Pero, en tu caso, quizás el paquete "ff" (que deja las cosas
> > en disco, y accede sólo ---pero de forma muy rápida--- a lo necesario) te
> > sea más útil.
> >
> > > Aunque sé que no es buena práctica, también me valdría si pudieran
> > definirse
> > > variables "globales".
> >
> >
> > Puedes imitar parcialmente el comportamiento de variables globales usando
> > las reglas del scope, si no redefines la variable en el conjunto de
> > environments anidados, y si no la pasas como parámetro de tu función. Y
> > pudes cambiar esas variables globales con assign, y similares.
> >
> >
> > Pero generalmente suele dar lugar a código difícil de mantener y debuggear.
> >
> > Un saludo,
> >
> >
> > R.
> >
> >
> > > Un saludo.
> > > Seds
> >
> > >       [[alternative HTML version deleted]]
> >
> > > [2  <text/plain; iso-8859-1 (quoted-printable)>]
> > > _______________________________________________
> > > R-help-es mailing list
> > > R-help-es en r-project.org
> > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > --
> > Ramon Diaz-Uriarte
> > Department of Biochemistry
> > Universidad Autónoma de Madrid
> > Spain
> >
> > http://ligarto.org/rdiaz
> >
> > Temporarily at:
> > Structural Biology and Biocomputing Programme
> > Spanish National Cancer Centre (CNIO)
> >
> > Phone: +34-91-732-8000 ext. 3019
> > Fax: +-34-91-224-6972
> >
> [2  <text/html; ISO-8859-1 (quoted-printable)>]

-- 
Ramon Diaz-Uriarte
Department of Biochemistry
Universidad Autónoma de Madrid
Spain

http://ligarto.org/rdiaz

Temporarily at:
Structural Biology and Biocomputing Programme
Spanish National Cancer Centre (CNIO)
 
Phone: +34-91-732-8000 ext. 3019
Fax: +-34-91-224-6972



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