2015-06-16 3 views
1
require(ngram) 
require(stringr) 
res<-readLines("text1.txt") 
wordlength=0 

for(j in 1:length(res)){ 
temp<-sapply(strsplit(res[j]," "), length) 
if (temp>=wordlength) { 
    wordlength=temp 
} 
} 

rm("temp") 
data<-data.frame 

for(i in 1:length(res)){ 
x<-res[i] 
ng<-ngram(x,n=2) 
temp<-babble(ng,genlen=500,seed=123) 
data[i]<-ngram(temp,n=2) 
} 

get.ngrams(ngram(bab[1,],n=2)) 
babng<-matrix(nrow=length(res),wordlength) 

Я пытаюсь сохранить данные Ngram в кадре данных из этого цикла, я также пытался сохранить его в матрице, но эта ошибка показывает:объекты Сохранение Ngram в dataframe

"object of type 'closure' is not subsettable" 

Я хочу получить частотное распределение каждого элемента 2gram из babbler. Извините за мою грязную кодировку. Я новичок в R.

ответ

0

В коде, вы звоните:

data<-data.frame 

, который присваивает функции data.frame переменной data. Позже вы вызываете data[i]<-ngram(temp,n=2), что вызывает ошибку, потому что функция, назначенная переменной data, не может быть подстроена с использованием оператора подмножества [. Вы, вероятно, хотите создать объект data.frame и присвоить его переменной data по вызывающей функцию data.frame через:

data<-data.frame() 
+0

Actuall y Я пытаюсь получить частоты от объекта 2gram для каждой пары. Таким образом, просто сохранение данных в формате 2gram в кадре не будет делать трюк, я думаю. –

+0

Большое спасибо @Jthorpe –

0

Это будет также сделать это довольно легко:

require(quanteda) 
Bigrams <- tokenize(toLower(res), ngrams = 2) 
as.data.frame(table(Bigrams)) 

Вы можете сделайте это для более чем одного документа, если res является символьным вектором документов, используя

BigramDfm <- dfm(res, ngrams = 2) 
as.data.frame(BigramDfm) 
+1

Отлично! Спасибо, Кен! Я сохранил его, используя имена строк в терминах матрицы документов, но ваша надежность. –

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