[R-es] Loop sobre muchos data frames

Jorge I Velez jorgeivanvelez en gmail.com
Lun Abr 13 02:30:32 CEST 2015


Gracias, Oscar.

Al parecer corresponde a un vector de caracteres.  Puesto que lo
que necesitamos es la informacion asociado a cada uno de esos "nombres",
creo que necesitas _leer_ la informacion que esta en cada uno de ellos.
Por ejemplo,

y <- scan(bNames[1], what = 'character')
y

tendra la informacion contenida en el archivo "qB001.txt".  Una vez con esa
informacion puedes construir el corpus como

TermDocumentMatrix(y, control = list(tokenize = nGram1Tok))

y continuar el proceso que tienes en mente.

Ten en cuenta que no puedo probar nada de lo que sugiero, asi que es solo
una "sugerencia".

Saludos cordiales,
Jorge.-


2015-04-13 10:24 GMT+10:00 Oscar Benitez <oscar.benitez1962 en gmail.com>:

> Jorge, amigos de R-help
>
> obtengo lo siguiente:
>
>
> > str(bNames)
>  chr [1:150] "qB001" "qB002" "qB003" "qB004" "qB005" "qB006" "qB007" ...
>
>
> Gracias y saludos
> Oscar
>
> El 12 de abril de 2015, 20:15, Jorge I Velez <jorgeivanvelez en gmail.com>
> escribió:
>
>> Hola Oscar,
>>
>> A lo mejor este equivocado, pero creo que necesitas
>>
>> read.table(bNames[[i]])
>>
>> en lugar de
>>
>> bNames[[i]]
>>
>> Como esta, bNames[[i]] corresponde al nombre del corupus, no al corpus
>> como tal.
>>
>> Nos ayudaria muchisimo el resultado de
>>
>> str(bNames)
>>
>> Saludos cordiales,
>> Jorge.-
>>
>>
>> 2015-04-13 9:25 GMT+10:00 Oscar Benitez <oscar.benitez1962 en gmail.com>:
>>
>>> Jorge, estimados colaboradores de R-help
>>>
>>> Estuve tratando de utilizar un script para uno de los pasos en mi
>>> análisis, que es transformar cada uno de los corpus en mi espacio de
>>> trabajo en un objeto TermDocumentMatrix
>>>
>>> Tengo un vector llamado bNames que lista todos los corpus que quiero
>>> pasar a TDM, y construí los siguientes comandos:
>>>
>>> tdm.n1 <- vector('list', length = length(bNames))
>>>
>>> for(i in seq_along(tdm.n1)){
>>>   tdm.n1.[[i]] <-
>>> TermDocumentMatrix(bNames[[i]],control=list(tokenize=nGram1Tok))
>>> }
>>>
>>> pero obtengo el siguiente error:
>>>
>>> Error in UseMethod("TermDocumentMatrix", x) :
>>>   no applicable method for 'TermDocumentMatrix' applied to an object of
>>> class "character"
>>>
>>> entonces revisé qué es lo que bNames[[i]] le está pasando al for
>>>
>>> bNames[[1]]
>>> [1] "qB001"
>>>
>>> Una cadena de texto, no el corpus llamado "qB001"!!, por eso obtengo el
>>> error.
>>> Alguien se le ocurre cómo hacer para que lea cada uno de los objetos en
>>> la lista y se los pase de a uno a la función?
>>> Muchas gracias por adelantado
>>> Oscar
>>>
>>>
>>>
>>>
>>>
>>>
>>> El 10 de abril de 2015, 11:28, Jorge I Velez <jorgeivanvelez en gmail.com>
>>> escribió:
>>>
>>>> Oscar,
>>>>
>>>> Cambia
>>>>
>>>> (l[i])
>>>>
>>>> por
>>>>
>>>> read.table(l[i])
>>>>
>>>> Olvide leer cada archivo en el codigo anterior.
>>>>
>>>> Saludos,
>>>> Jorge.-
>>>>
>>>> 2015-04-11 0:02 GMT+10:00 Oscar Benitez <oscar.benitez1962 en gmail.com>:
>>>>
>>>>> Jorge
>>>>> Gracias por el consejo. Aparentemente no lo estoy aplicando bien, pues
>>>>> el objeto que obtengo no contiene lo que quiero.
>>>>> Me explico, al ejecutar
>>>>>
>>>>> txt <- vector('list', length = length(names)) #names el el vector
>>>>> donde ya tenía almacenada la lista de txt's
>>>>> for(i in seq_along(txt)){
>>>>>   txt[[i]] <- Corpus(VectorSource(names[i]))
>>>>> }
>>>>>
>>>>> obtengo el objeto txt:
>>>>> > class(txt)
>>>>> [1] "list"
>>>>>
>>>>> si extraigo solamente el primer objeto de esa lista:
>>>>> > txt[[1]]
>>>>> <<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>
>>>>>
>>>>> si quiero ver el contenido del primer copus
>>>>>
>>>>> > inspect(txt[[1]])
>>>>> <<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>
>>>>>
>>>>> [[1]]
>>>>> <<PlainTextDocument (metadata: 7)>>
>>>>> qB001.txt
>>>>>
>>>>> me informa cosas sobre el objeto, pero los datos no están allí...
>>>>> debería mostrarme algo así como:
>>>>>
>>>>> inspect(cbD02[1:1]) #inspecciono el corpus cbD120, creado a mano por
>>>>> la sentencia cbD120<-Corpus(VectorSource(qT120))
>>>>>
>>>>> #......contenido del corpus......
>>>>> I went to go see some gypsy to tell me my future, but she asked for my
>>>>> photograph instead.
>>>>> itz me the one who was talkin to u last time !!!
>>>>> starts at 4pm. come get sunny munny :)
>>>>> kind of scary to imagine what needs military wiping!!!!
>>>>> #.....más.contenido del corpus......
>>>>>
>>>>>
>>>>> si quiero aplicarle un función propia de limpieza de corpus, por
>>>>> ejemplo eliminar los números presentes en el corpus
>>>>> > tm_map(txt[[1]], removeNumbers)
>>>>> <<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>
>>>>>
>>>>> no hace nada de nada...
>>>>>
>>>>> Saludos
>>>>>
>>>>> Oscar
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> El 10 de abril de 2015, 1:15, Jorge I Velez <jorgeivanvelez en gmail.com>
>>>>> escribió:
>>>>>
>>>>>> Oscar,
>>>>>>
>>>>>> Una forma de trabajar con este tipo de archivos es utilizando listas:
>>>>>>
>>>>>> # directorio del proyecto
>>>>>> setwd('~/proyecto')
>>>>>>
>>>>>> # archivos de texto
>>>>>> l <- list.files(pattern = '.txt')
>>>>>>
>>>>>> # procesamiento
>>>>>> txt <- vector('list', length = length(l))
>>>>>> for(i in seq_along(txt)){
>>>>>> txt[[i]] <- Corpus(VectorSource(l[i]))
>>>>>> }
>>>>>>
>>>>>> # para acceder a la informacion del primero archivo, solo debes
>>>>>> escribir
>>>>>> txt[[1]]
>>>>>>
>>>>>>
>>>>>> Espero sea de utilidad.
>>>>>>
>>>>>> Saludos,
>>>>>> Jorge.-
>>>>>>
>>>>>>
>>>>>> 2015-04-10 14:14 GMT+10:00 Oscar Benitez <oscar.benitez1962 en gmail.com
>>>>>> >:
>>>>>>
>>>>>>> Hola a todos!
>>>>>>> Estoy en un proyecto de text mining y por razones de los recursos
>>>>>>> con que
>>>>>>> cuento tuve que separar los archivos de texto de input del proyecto
>>>>>>> en
>>>>>>> muchos archivos pequeños.
>>>>>>> Luego de transformar cada uno de estos archivos en un corpus
>>>>>>> separado,
>>>>>>> puedo aplicar limpieza sobre cada corpus, buscar n-gramas, construir
>>>>>>> cada
>>>>>>> termDocumentMatrix y finalmente reunir todo en una sola TDM.
>>>>>>>
>>>>>>> Pero estoy atorado en el paso de transformar cada uno de los
>>>>>>> archivos en
>>>>>>> corpus mediante un loop. Es decir que en lugar de hacer esto
>>>>>>> infinitas
>>>>>>> veces:
>>>>>>>
>>>>>>> #Librerias necesarias
>>>>>>> library(tm)
>>>>>>>
>>>>>>> corpus_001<-Corpus(VectorSource(qBlog001))
>>>>>>> corpus_002<-Corpus(VectorSource(qBlog002))
>>>>>>> corpus_003<-Corpus(VectorSource(qBlog003))
>>>>>>> .........
>>>>>>> corpus_150<-Corpus(VectorSource(qBlog150))
>>>>>>> ........
>>>>>>>
>>>>>>> quisiera poder armar un loop que haga el trabajo, como por ejemplo
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> #lista con los nombres que quiero para cada corpus
>>>>>>> c_names <- paste("corpus_",formatC(seq(length(bNames)),
>>>>>>>                                                 width=3, flag="0"),
>>>>>>> sep="")
>>>>>>>
>>>>>>> donde bNames es la lista de los df que tengo cargados "qBlog001"
>>>>>>> "qBlog002"..."qBlog150"...
>>>>>>>
>>>>>>> algo así es lo que tengo en mente:
>>>>>>>
>>>>>>> for (i in bNames) {
>>>>>>>   for (j in c_names) {
>>>>>>>     j<- Corpus(VectorSource(i))
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>> Pero no funciona, he probado con lapply, con sapply, con llply de la
>>>>>>> librería (plyr) y no encuentro la manera de hacerlo..
>>>>>>> Cualquier sugerencia sera bienvenida!
>>>>>>> Muchas gracias por adelantado!
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Oscar Benitez
>>>>>>>
>>>>>>>         [[alternative HTML version deleted]]
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> R-help-es mailing list
>>>>>>> R-help-es en r-project.org
>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Oscar Benitez
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Oscar Benitez
>>>
>>
>>
>
>
> --
> Oscar Benitez
>

	[[alternative HTML version deleted]]



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