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

Carlos Ortega co| @end|ng |rom qu@||tyexce||ence@e@
Lun Feb 10 20:04:32 CET 2020


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]]



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