Возвращает фрейм данных из функции с разной длиной в R

#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)) части?