[R-es] Cannot allocate a vector of size...

Javier Marcuzzi j@v|er@ruben@m@rcuzz| @end|ng |rom gm@||@com
Mar Feb 11 00:01:04 CET 2020


Estimada Miriam Alzate

Creo que casi todos pasamos por un problema semejante, por las dudas ¿usted
utiliza alguna librería para realizar el análisis o se encuentra
escribiendo desde cero utilizando matrices? Un matemático puede explicarlo
mucho mejor, pero cuándo yo comencé a ver matrices transpuestas, y varias
en modelos muy semejantes a los modelos mixtos, encontré una cantidad de
requerimientos de memoria impresionantes, luego me aprendí que matriz común
solo es útil cuándo los datos son pocos, a nivel industrial no hay
computadora que pueda. Seguramente si utiliza algún paquete este contempla
el problema y automáticamente trabaja sobre la memoria. ¿Utilizo algo como
lo siguiente (copio y pego)?
library(Matrix)
A <- as(regMat, "sparseMatrix") # see also `vignette("Intro2Matrix")`
B <- Matrix(regMat, sparse = TRUE) # Thanks to Aaron for pointing this out
identical(A, B)
Javier Rubén Marcuzzi

El lun., 10 feb. 2020 a las 16:05, Carlos Ortega (<cof using qualityexcellence.es>)
escribió:

> Hola Miriam,
>
> Puedes hacer varias cosas para salir al paso:
>
>    - El flujo proceso que se suele seguir en este tipo de análisis es el de
>    cargar todos los documentos a una gran matriz (documento/palabra) sobre
> la
>    que luego te quitas muchas palabras "inútiles" (las stopwords). Pues lo
> que
>    puedes hacer de primeras, es sobre tus ficheros de palabras de entrada
>    limpiarles y quitarles estas palabras (preposiciones, artículos y
>    adverbios) con esto minimizas mucho el número de palabras a representar.
>    También habrá palabras que en tu tipo de análisis significarán poco (me
> lo
>    invento la palabra "producto" por ejemplo).
>       - ¿Cómo limpio esto en mis ficheros?. Puedes hacerlo con cierta
>       facilidad utilizando comandos de linux (grep, sed en particular).
>       - Una vez que has limpiado todo esto, puedes volver a probar a cargar
>       el nuevo fichero en "tm" y proceder con el análisis. Si es que tu
> memoria
>       RAM (no el disco como te han dicho) es la suficiente.
>       - Realmente, si estás interesada en conocer la frecuencia de palabras
>          para luego pintar una "inútil" nube de palabras, puedes
> incluso calcular la
>          frecuencia de aparición igualmente con un comando de linux
> (unique). Y
>          luego usar el paquete "wordcloud2" para pintar la nubecita. :-).
>       - Como alternativa, como supongo que querrás analizar sentimiento, y
>    estas cosa o incluso ver POS cambiaría de tercio y no usaría "tm" me
>    pasaría a la librería "udpipe" o en su defecto a la librería (tidytext)
> del
>    que Julia Silge (su autora, tiene su libro de cómo usar su librería en
>    abierto:
>    https://www.tidytextmining.com/tidytext.html#the-unnest_tokens-function
> ).
>
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
>
> El lun., 10 feb. 2020 a las 17:20, Xavier-Andoni Tibau Alberdi (<
> xavitibau using gmail.com>) escribió:
>
> > Me temo que no tengo demasiada experiencia en trabajar con sparse matrix
> en
> > R. Definitivamente cuando haces 'as.matrix(x)' estas convirtiendo x en
> una
> > matriz normal, no sparse. He visto que existe el paquete slam para
> trabajar
> > con ellas (documentación
> > <https://www.rdocumentation.org/packages/slam/versions/0.1-47>).
> Deberías
> > ver si las opciones del paquete te permiten hacer lo que quieres.
> >
> > Faltaría más información de que haces luego con la matriz, para poder
> saber
> > si es posible dividir-la. Te pongo un ejemplo, si quieres calcular el
> valor
> > promedio de las columnas, puedes dividir la matriz en dos, calcularlos
> por
> > separado y luego juntar los resultados. Pero si tu matriz sirve para
> hacer
> > una regresión lineal, no puedes, puesto que necesitas la inversa de la
> > matriz y no se puede calcular a partir de dos mitades.
> >
> > A ver si con el paquete slam puedes continuar, sino deberías compartir
> que
> > haces luego con la matriz para que podamos intentar aconsejarte.
> >
> > Saludos,
> >
> > Xavier Tibau
> >
> > Missatge de l'adreça <miriam.alzate using unavarra.es> del dia dl., 10 de
> febr.
> > 2020 a les 16:56:
> >
> > > Muchas gracias Xabier.
> > >
> > > He intentaddo trabajar con la sparse matrix pero al pasar tdm a matriz
> me
> > > dice también que "cannot allocate a vector of size 12 gb".
> > > He hecho tdm<-as.matrix(tdm)
> > >
> > > ¿Está bien hecho eso para trabajar con la sparse matrix?
> > >
> > > Gracias!
> > >
> > > El Lun, 10 de Febrero de 2020, 16:15, Xavier-Andoni Tibau Alberdi
> > escribió:
> > > > La respuesta de Carlos creo que es mucho mas acertada que la mía.
> > Cuando
> > > > trabajas con una matriz mayoritariamente con 0s, puedes
> representar-la
> > en
> > > > forma de sparse matrix, y ocupa mucho menos espacio porque no guardas
> > > > todos
> > > > los valores, sino aquellos distintos de 0 y su posición.
> > > >
> > > > Estas construyendo la matriz sparse con esto:
> > > >  tdm<-TermDocumentMatrix(corpus,control=list(weighting =weightTf))
> > > >
> > > > puedes ver aquí
> > > > <
> > >
> >
> https://www.rdocumentation.org/packages/tm/versions/0.7-7/topics/TermDocumentMatrix
> > > >
> > > > la documentación.
> > > >
> > > > Al hacer esto, conviertes la matrz sparse a matriz normal y pones en
> > > > memoria todos los 0s, que ahora ocupan espacio en la memoria volátil
> > > (RAM)
> > > > de tu ordenador.
> > > > tdm.reviews.m<-as.matrix(tdm)
> > > >
> > > > Estamos hablando de memoria RAM, no del disco duro de tu ordenador.
> > > >
> > > > Entiendo que tal y como sugiere Carlos, (1) lo mejor es que antes de
> > > pasar
> > > > de sparse matrix a matriz normal, consideres en reducir la cantidad
> de
> > > > columnas (o filas) de tu matriz. Imagino que es una matriz con
> > > frecuencias
> > > > de palabras, a lo mejor puedes eliminar aquellas columnas que
> > representen
> > > > términos muy poco usados. O (2) sigas usando la sparse matrix para tu
> > > > analisis.
> > > >
> > > > Espero que se entienda y te sirva de ayuda,
> > > >
> > > > Saludos,
> > > >
> > > > Xavier Tibau
> > > >
> > > >
> > > >
> > > > Missatge de l'adreça <miriam.alzate using unavarra.es> del dia dl., 10 de
> > > febr.
> > > > 2020 a les 16:05:
> > > >
> > > >> Buenas,
> > > >> El archivo de R ocupa 33 megas. La matriz que quiero construir cupa
> 14
> > > >> gb.
> > > >> En el disco local (C) tengo 400 gb disponibles de 670.
> > > >> No estoy muy puesta en trabajar con este tipo de datos. ¿Qué
> > diferencia
> > > >> es
> > > >> trabajar con data.frame?
> > > >>
> > > >> Gracias!
> > > >>
> > > >> El Vie, 7 de Febrero de 2020, 18:07, Xavier-Andoni Tibau Alberdi
> > > >> escribió:
> > > >> > Depende de la operació que quieras hacer con la matriz. Si quitas
> > > >> filas y
> > > >> > columnas en algun momento, quiza lo puedes hacer por bloques y
> luego
> > > >> la
> > > >> > juntas.  O quizá puedes cargarlo directamente como data.frame?
> > Quanta
> > > >> RAM
> > > >> > tienes? Cuanto pésan los datos?
> > > >> >
> > > >> >
> > > >> >
> > > >> >
> > > >> >
> > > >> > El vie., 7 feb. 2020 18:04, <miriam.alzate using unavarra.es> escribió:
> > > >> >
> > > >> >> Es la primera vez que trabajo con este tipo de datos...No se si
> se
> > > >> puede
> > > >> >> dividir esa matriz. ¿Cómo lo podría hacer?
> > > >> >>
> > > >> >> Muchas gracias!
> > > >> >> El Vie, 7 de Febrero de 2020, 17:55, Xavier-Andoni Tibau Alberdi
> > > >> >> escribió:
> > > >> >> > Significa que tus datos són muy grandes y no se pueden guardar
> en
> > > >> la
> > > >> >> RAM.
> > > >> >> > Tienes alternativas para dividir la matriz?
> > > >> >> >
> > > >> >> > El vie., 7 feb. 2020 17:26, <miriam.alzate using unavarra.es>
> > escribió:
> > > >> >> >
> > > >> >> >> Buenas tardes,
> > > >> >> >>
> > > >> >> >> Estoy haciendo un análisis de contenido con el paquete tm. A
> la
> > > >> hora
> > > >> >> de
> > > >> >> >> ejecutar este código:
> > > >> >> >>  tdm<-TermDocumentMatrix(corpus,control=list(weighting
> > =weightTf))
> > > >> >> >>  tdm.reviews.m<-as.matrix(tdm)
> > > >> >> >>
> > > >> >> >> La primera línea sí me la ejecuta bien pero en la segunda
> tengo
> > > >> este
> > > >> >> >> error:
> > > >> >> >> Error: cannot allocate vector of size 14.0 Gb
> > > >> >> >>
> > > >> >> >> ¿Cómo puedo corregirlo? Estoy usando la versión de 64bits de
> R.
> > > >> >> >>
> > > >> >> >> Un saludo
> > > >> >> >>
> > > >> >> >> Miriam
> > > >> >> >>
> > > >> >> >> _______________________________________________
> > > >> >> >> R-help-es mailing list
> > > >> >> >> R-help-es using r-project.org
> > > >> >> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
> > > >> >> >>
> > > >> >> >
> > > >> >>
> > > >> >>
> > > >> >>
> > > >> >
> > > >>
> > > >>
> > > >>
> > > >
> > >
> > >
> > >
> >
> >         [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

	[[alternative HTML version deleted]]



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