#r #function #n-gram #rbind
#r #функция #n-грамм #перебинтовать
Вопрос:
Я написал функцию, которая будет выполнять unigram и bigrams для определенного столбца и возвращать их в том же фрейме данных (как rbind), но иногда я получаю ошибку, и я думаю, что из-за того, что я присвоил topfeatures значение 30, поэтому, если столбец не может сгенерировать 30 строк для unigram, он вернет меньше, чем 30, например 15, и биграммы вернут 30, поэтому я получу сообщение об ошибке, потому что функция не может повторно связать и вернуть наборы данных, если они имеют разную длину.
мой код:
M <- function(L) {
unigram <- L %>%
tokens() %>%
tokens_ngrams(n = 1, concatenator = " ") %>%
dfm() %>%
topfeatures(30)
df1 <- data.frame(word_unigram = names(unigram), count_unigram = unigram)
rownames(df1) <- NULL
bigram <- L %>%
tokens() %>%
tokens_ngrams(n = 2, concatenator = " ") %>%
dfm() %>%
topfeatures(30)
df2 <- data.frame(word_bigram = names(bigram), count_bigram = bigram)
rownames(df2) <- NULL
return(list(df1, df2))
}
datafinal <- data.frame(lapply(data$name, function (L) M(L)))
ошибка:
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 30, 19, 10
итак, мой вопрос: есть ли какой-нибудь способ сделать так, чтобы функция возвращала результат, даже если они не имеют одинаковой длины при полном a NA на нем?
Комментарии:
1. не уверен, я думаю , что для этого можно было бы использовать smartbind из gtools. я думаю, что использовал его для того же случая, о котором вы просите. Поскольку вы не привели воспроизводимого примера, я не могу его опробовать
2. но как я могу использовать его внутри функции? или в той
return(list(df1, df2))
части?