[R-es] Loop sobre muchos data frames

Oscar Benitez oscar.benitez1962 en gmail.com
Lun Abr 13 02:24:10 CEST 2015


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