Servicio de Estadísticas Demográficas y Sociales
2011-Sep-28 11:53 UTC
[R-es] ¿Pasar parámetros por referencia?
¿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) Aunque sé que no es buena práctica, también me valdría si pudieran definirse variables "globales". Un saludo. Seds [[alternative HTML version deleted]]
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
Servicio de Estadísticas Demográficas y Sociales
2011-Sep-28 13:40 UTC
[R-es] ¿Pasar parámetros por referencia?
Lo primero, muchas gracias por tus sugerencias. Voy a investigar el paquete ff a ver si así lo resuelvo. Sobre la segunda alternativa que apuntas, ¿puede modificarse parte de una matriz mediante assign o alguna función similar? Saludos. Seds El 28 de septiembre de 2011 14:17, Ramon Diaz-Uriarte <rdiaz02@gmail.com>escribió:> > > > > On Wed, 28 Sep 2011 13:53:19 +0200,Servicio de Estadísticas Demográficas y > Sociales <seds.ive@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@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 >[[alternative HTML version deleted]]
Hola, No sé si utilizas R sobre una máquina Windows. Si es así, una alternativa adicional es utilizar la solución "hardware" además de correr sobre 64-bits: 2.28 Should I run 32-bit or 64-bit R? For most users (especially beginners) we would recommend using the 32-bit build. The advantage of a native 64-bit application is that it gets a 64-bit address space and hence can address far more than 4GB (how much depends on the version of Windows, but in principle 8TB). This allows a single process to take advantage of more than 4GB of RAM (if available) and for R''s memory manager to more easily handle large objects (in particular those of 1GB or more). The disadvantages are that all the pointers are 8 rather than 4 bytes and so small objects are larger and more data has to be moved around, and that less external software is available for 64-bit versions of the OS. The 64-bit compilers are able to take advantage of extra features of all x86-64 chips (more registers, SSE2/3 instructions, ...) and so the code may run faster despite using larger pointers. For advanced users the choice may be dictated by whether the contributed packages needed are available in 64-bit builds (and if CRAN binary packages are not that is some indication that installing them from sources is problematic). At the time of writing the most commonly-used CRAN packages without 64-bit versions were BRugs and rggobi. The considerations can be more complex: for example 32/64-bit RODBC need 32/64-bit ODBC drivers respectively, and where both exist they may not be able to be installed together. An extreme example is the Microsoft Access/Excel ODBC drivers: if you have installed 64-bit Microsoft Office you can only install the 64-bit drivers and so need to use 64-bit RODBC and hence R. Saludos, Carlos Ortega www.qualityexcellence.es 2011/9/28 Servicio de Estadísticas Demográficas y Sociales < seds.ive@gmail.com>> Lo primero, muchas gracias por tus sugerencias. Voy a investigar el paquete > ff a ver si así lo resuelvo. > > Sobre la segunda alternativa que apuntas, ¿puede modificarse parte de una > matriz mediante assign o alguna función similar? > > Saludos. > Seds > > El 28 de septiembre de 2011 14:17, Ramon Diaz-Uriarte > <rdiaz02@gmail.com>escribió: > > > > > > > > > > > On Wed, 28 Sep 2011 13:53:19 +0200,Servicio de Estadísticas Demográficas > y > > Sociales <seds.ive@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@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 > > > > [[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]]
Servicio de Estadísticas Demográficas y Sociales
2011-Sep-28 14:36 UTC
[R-es] ¿Pasar parámetros por referencia?
Lo estoy corriendo en Operating system: Redhat Enterprise Linux 6 Kernel and CPU: Linux 2.6.32-131.6.1.el6.x86_64 on x86_64 Processor information: Intel(R) Xeon(TM) CPU 3.60GHz, 4 cores Memory: 8 GB (supongo que aquí está el problema) Un saludo. Seds El 28 de septiembre de 2011 16:26, Carlos Ortega <coforfe@gmail.com>escribió:> Hola, > > No sé si utilizas R sobre una máquina Windows. > Si es así, una alternativa adicional es utilizar la solución "hardware" > además de correr sobre 64-bits: > > 2.28 Should I run 32-bit or 64-bit R? > > For most users (especially beginners) we would recommend using the 32-bit > build. > > The advantage of a native 64-bit application is that it gets a 64-bit > address space and hence can address far more than 4GB (how much depends on > the version of Windows, but in principle 8TB). This allows a single process > to take advantage of more than 4GB of RAM (if available) and for R''s memory > manager to more easily handle large objects (in particular those of 1GB or > more). The disadvantages are that all the pointers are 8 rather than 4 bytes > and so small objects are larger and more data has to be moved around, and > that less external software is available for 64-bit versions of the OS. The > 64-bit compilers are able to take advantage of extra features of all x86-64 > chips (more registers, SSE2/3 instructions, ...) and so the code may run > faster despite using larger pointers. > > For advanced users the choice may be dictated by whether the contributed > packages needed are available in 64-bit builds (and if CRAN binary packages > are not that is some indication that installing them from sources is > problematic). At the time of writing the most commonly-used CRAN packages > without 64-bit versions were BRugs and rggobi. The considerations can be > more complex: for example 32/64-bit RODBC need 32/64-bit ODBC drivers > respectively, and where both exist they may not be able to be installed > together. An extreme example is the Microsoft Access/Excel ODBC drivers: if > you have installed 64-bit Microsoft Office you can only install the 64-bit > drivers and so need to use 64-bit RODBC and hence R. > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > 2011/9/28 Servicio de Estadísticas Demográficas y Sociales < > seds.ive@gmail.com> > >> Lo primero, muchas gracias por tus sugerencias. Voy a investigar el >> paquete >> ff a ver si así lo resuelvo. >> >> Sobre la segunda alternativa que apuntas, ¿puede modificarse parte de una >> matriz mediante assign o alguna función similar? >> >> Saludos. >> Seds >> >> El 28 de septiembre de 2011 14:17, Ramon Diaz-Uriarte >> <rdiaz02@gmail.com>escribió: >> >> > >> > >> > >> > >> > On Wed, 28 Sep 2011 13:53:19 +0200,Servicio de Estadísticas Demográficas >> y >> > Sociales <seds.ive@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@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 >> > >> >> [[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]]
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
SED Quizas la alternativa es no intentar pasar la matriz sino usarla directamente Por ejemplo la funcion "mifuncion" modifica A y da como resultado la suma de A + el argumento de la funcion A, es modificada dentro de la funcion. Asi, podrias usar la matriz de manera directa. A=2 mifuncion<-*function*(x) { envir=*globalenv*() envir$A=3 x=x+envir$3 x } mifuncion(4) #devolvera un 7 y además A queda modificada 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) 2011/9/28 Servicio de Estadísticas Demográficas y Sociales < seds.ive@gmail.com>> ¿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) > > Aunque sé que no es buena práctica, también me valdría si pudieran > definirse > variables "globales". > > Un saludo. > Seds > > [[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]]
Servicio de Estadísticas Demográficas y Sociales
2011-Sep-28 19:56 UTC
[R-es] ¿Pasar parámetros por referencia?
La función consiste en un proceso iterativo en el que las modificaciones a la matriz grande son del tipo matriz.grande[rango1, rango2]<-matriz.normal Ese tipo de sentencias creo que puedo modificarlas (sin "estropear" la función) si encuentro el modo de que R no intente ubicar de nuevo espacio, quizás con ff. Lo que veo más problemático es que matriz.grande siga siendo una matriz y no un objeto de clase ff para poder incluirlo con comodidad en operaciones usuales de matrices. ***** Lo que comentas de las copias intermedias es justamente el problema que tengo. Aunque en la función ponga, por ejemplo, matriz.grande[rango1, rango2]<<-nuevos.valores en realidad R genera una copia completa de matriz.grande. Saludos. Seds El 28 de septiembre de 2011 19:40, Ramon Diaz-Uriarte <rdiaz02@gmail.com>escribió:> > > > On Wed, 28 Sep 2011 15:40:43 +0200,Servicio de Estadísticas Demográficas y > Sociales <seds.ive@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@gmail.com>escribió: > > > > > > > > > > > > > > > > On Wed, 28 Sep 2011 13:53:19 +0200,Servicio de Estadísticas > Demográficas y > > > Sociales <seds.ive@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@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 >[[alternative HTML version deleted]]
On Wed, 28 Sep 2011 21:56:09 +0200,Servicio de Estadísticas Demográficas y Sociales <seds.ive en gmail.com> wrote:> [1 <text/plain; ISO-8859-1 (quoted-printable)>] > La función consiste en un proceso iterativo en el que las modificaciones a > la matriz grande son del tipo > matriz.grande[rango1, rango2]<-matriz.normal> Ese tipo de sentencias creo que puedo modificarlas (sin "estropear" la > función) si encuentro el modo de que R no intente ubicar de nuevo espacio, > quizás con ff.Usar ff requerirá ciertos cambios en el código,, y tendrás que tener cuidado con guardar los resultados (ff escribe a disco, pero no es directamente un objeto .RData). Es más trabajo si quieres mover resultados entre máquinas.> Lo que veo más problemático es que matriz.grande siga siendo una matriz y no > un objeto de clase ff para poder incluirlo con comodidad en operaciones > usuales de matrices.Con ff no tienes a tu disposición todas las operaciones que hay en R con matrices.> *****> Lo que comentas de las copias intermedias es justamente el problema que > tengo. Aunque en la función ponga, por ejemplo,> matriz.grande[rango1, rango2]<<-nuevos.valores> en realidad R genera una copia completa de matriz.grande.Exacto. Quizás una solución expeditiva sea moverse a una máquina con mucha más RAM ;-). R.> Saludos. > Seds> El 28 de septiembre de 2011 19:40, Ramon Diaz-Uriarte > <rdiaz02 en gmail.com>escribió:> > > > > > > > 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 > > > [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
Disculpen por mi ignoracia, puede ser que pregunte algo medio estúpido, pero. Si la cantidad de datos requiere mucha ram. ¿Que posibilidad hay? 1) De crear dos vectores (listas, data.frame), solo con las columnas necesarias (matriz.grande[rango1, rango2]<-matriz.normal) Eliminar todo el resto de la memoria. Y procesar. 2) ¿De puede usar sparse matrix? Javier El 30 de septiembre de 2011 04:23, Ramon Diaz-Uriarte <rdiaz02@gmail.com>escribió:> > > > On Wed, 28 Sep 2011 21:56:09 +0200,Servicio de Estadísticas Demográficas y > Sociales <seds.ive@gmail.com> wrote: > > [1 <text/plain; ISO-8859-1 (quoted-printable)>] > > La función consiste en un proceso iterativo en el que las modificaciones > a > > la matriz grande son del tipo > > matriz.grande[rango1, rango2]<-matriz.normal > > > Ese tipo de sentencias creo que puedo modificarlas (sin "estropear" la > > función) si encuentro el modo de que R no intente ubicar de nuevo > espacio, > > quizás con ff. > > > Usar ff requerirá ciertos cambios en el código,, y tendrás que tener > cuidado con guardar los resultados (ff escribe a disco, pero no es > directamente un objeto .RData). Es más trabajo si quieres mover resultados > entre máquinas. > > > > > Lo que veo más problemático es que matriz.grande siga siendo una matriz y > no > > un objeto de clase ff para poder incluirlo con comodidad en operaciones > > usuales de matrices. > > Con ff no tienes a tu disposición todas las operaciones que hay en R con > matrices. > > > > ***** > > > Lo que comentas de las copias intermedias es justamente el problema que > > tengo. Aunque en la función ponga, por ejemplo, > > > matriz.grande[rango1, rango2]<<-nuevos.valores > > > en realidad R genera una copia completa de matriz.grande. > > > Exacto. > > > > > Quizás una solución expeditiva sea moverse a una máquina con mucha más RAM > ;-). > > > R. > > > > Saludos. > > Seds > > > El 28 de septiembre de 2011 19:40, Ramon Diaz-Uriarte > > <rdiaz02@gmail.com>escribió: > > > > > > > > > > > > > On Wed, 28 Sep 2011 15:40:43 +0200,Servicio de Estadísticas > Demográficas y > > > Sociales <seds.ive@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@gmail.com>escribió: > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, 28 Sep 2011 13:53:19 +0200,Servicio de Estadísticas > > > Demográficas y > > > > > Sociales <seds.ive@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@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 > > > > > [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 > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Hola Javier: El 30/09/11 15:03, Javier Marcuzzi escribió:> Disculpen por mi ignoracia, puede ser que pregunte algo medio estúpido, > pero. > > Si la cantidad de datos requiere mucha ram. > > ¿Que posibilidad hay? > > 1) De crear dos vectores (listas, data.frame), solo con las columnas > necesarias (matriz.grande[rango1, rango2]<-matriz.normal) > Eliminar todo el resto de la memoria. > Y procesar. > > 2) ¿De puede usar sparse matrix? > > JavierNo se la respuesta a ninguna de las dos preguntas que haces, pero he visto que utilizas Red Hat (¿eras el autor de la pregunta inicial? ¿no?). Si lo que necesitas es RAM utiliza la memoria de intercambio, es más lenta pero puedes ampliarla tanta como disco duro tengas: http://www.vicente-navarro.com/blog/2008/11/08/memoria-swap-en-un-fichero-¿cuanta-memoria-swap-necesitamos/ Ahí lo tienes todo bien explicado. Suerte. Salud y Revolución. Lobo. -- Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux, para no atar mis manos con las cadenas del soft propietario. --------- Desde El Ejido, en Almería, usuario registrado Linux #294013 http://www.counter.li.org