2015-04-16 3 views
1

У меня есть куча тела, загруженного в среду R, и я хочу преобразовать каждый из них в матрицу документов Term. Я попробовал комбинацию цикла for и assign, но он не работает, и я не могу понять, что не так.Назначение объекта в цикле for в R

хранить имена корпуса в среде в списке:

bNames<-ls() 

И сделать именованный список объектов

corpus.n1<-mget(bNames) 
> corpus.n1 
$qB001 
<<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>> 

$qB002 
<<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>> 
.... 

библиотек и п-граммовая функции

library(rJava) 
.jinit(parameters="-Xmx128g") 
library(RWeka) 
nGra2Tok <- function(x) NGramTokenizer(x, Weka_control(min = 2, max =2)) 

Виды вещей, которые я хочу положить в петлю:

tdm.n2.01<-TermDocumentMatrix(qB001,control=list(tokenize=nGram2Tok)) 
tdm.n2.02<-TermDocumentMatrix(qB002,control=list(tokenize=nGram2Tok)) 
tdm.n2.03<-TermDocumentMatrix(qB003,control=list(tokenize=nGram2Tok)) 
.... 

и TermDocumentMatrix петля

for(i in corpus.n1){ 
    tdm.n2<-paste(i) 
    assign(i, TermDocumentMatrix(tdm.n2,control=list(tokenize=nGram2Tok))) 
} 

Я получаю ошибку:

Error in UseMethod("TermDocumentMatrix", x) : 
    no applicable method for 'TermDocumentMatrix' applied to an object of class "character" 

Что я делаю неправильно?

ответ

2

Похоже, что corpus.n1 уже является именованным списком. Если вы хотите применить ту же функцию ко всем элементам, вам не нужен цикл вообще - простой lapply сделает работу:

tdm.n2 <- lapply(corpus.n1, TermDocumentMatrix, control = list(...)) 

Обратите внимание, что параметр control передается функции TermDocumentMatrix для каждый вызов. См. Также ?lapply, а также ?mapply.

+0

@krimir Спасибо за ваш ответ. 'Lapple' сделал трюк. –

Смежные вопросы