Использование пакета lsa в R - Ошибка в Ops.simple_triplet_matrix(m, 1): несовместимые размеры

Я пытаюсь научиться использовать пакет lsa в R. Я работаю с гораздо большим набором данных, чем в приведенном ниже примере, но это для целей воспроизводимости (опора этого человека для размещения этого кода на его сайте, это отличный ресурс).

Я получаю странное сообщение об ошибке, которое не могу решить:

Error in Ops.simple_triplet_matrix(m, 1) : Incompatible dimensions. 

ниже приведен код, с которым я возиться:

# load required libraries
library(tm)
library(ggplot2)
library(lsa)
library(SnowballC)
lsa <- function () {
# 1. Prepare mock data
text <- c("transporting food by cars will cause global warming. so we should go     local.",
          "we should try to convince our parents to stop using cars because it     will cause global warming.",
          "some food, such as mongo, requires a warm weather to grow. so they     have to be transported to canada.",
          "a typical Electronic Circuit can be built with a battery, a bulb, and     a switch.",
          "electricity flows from batteries to the bulb, just like water flows     through a tube.",
          "batteries have chemical energe in it. then electrons flow through a     bulb to light it up.",
          "birds can fly because they have feather and they are light.", "why     some birds like pigeon can fly while some others like chicken cannot?",
          "feather is important for birds' fly. if feather on a bird's wings is     removed, this bird cannot fly.")
view <- factor(rep(c("view 1", "view 2", "view 3"), each = 3))
df <- data.frame(text, view, stringsAsFactors = FALSE)

# prepare corpus
corpus <- Corpus(VectorSource(df$text))
# corpus <- tm_map(corpus, tolower)
# corpus <- tm_map(corpus, removePunctuation)
# corpus <- tm_map(corpus, function(x) removeWords(x, stopwords("english")))
# corpus <- tm_map(corpus, stemDocument, language = "english")
corpus <- tm_map(corpus, PlainTextDocument)

# 2. MDS with raw term-document matrix compute distance matrix
td.mat <- TermDocumentMatrix(corpus)

td.mat.lsa <- lw_logtf(td.mat) * gw_idf(td.mat)  # weighting
lsaSpace <- lsa(td.mat.lsa)  # create LSA space
dist.mat.lsa <- dist(t(as.textmatrix(lsaSpace)))  # compute distance matrix
return(dist.mat.lsa)  # check distance matrix

}

Я могу создать корпус без проблем, и я могу преобразовать его в матрицу терминологического документа. Ошибка срабатывает, когда я определяю dt.mat.lsa.

Трассировка выглядит следующим образом:

4 stop("Incompatible dimensions.") 
3 Ops.simple_triplet_matrix(m, 1) 
2 lw_logtf(td.mat) at lsa.R#31
1 lsa() 

Поэтому мои основные вопросы:

  1. почему я получаю эту ошибку?
  2. Как я могу исправить свой код, чтобы избежать такой ошибки?

Заранее благодарим за любую помощь, которую вы можете предложить здесь; это мой первый пост, так что отзывы о качестве моего вопроса тоже приветствуются!

1 ответ

Это выяснилось!

Я обернул свой код в вызов функции 'lsa' и использовал 'lsa' в качестве имени переменной в теле функции. Таким образом, он имеет несовместимые размеры, потому что lsa - это функция, которая по-разному определяется в этой среде.

уф!

Другие вопросы по тегам