Ошибка интеллектуального анализа текста в R: нечисловой аргумент бинарного оператора - PullRequest
0 голосов
/ 24 апреля 2018

Я выполнил поиск в Google, просмотрел текущие исправления для книги, искал ошибку в переполнении стека и не нашел ответа.Я следую в книге на страницах 4-10.

Эта часть работает нормально:

 original_books <- austen_books() %>%
 group_by(book) %>%
 mutate(linenumber = row_number(),
     chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]",
                                             ignore_case = TRUE)))) %>%
ungroup()
original_books

tidy_books <- original_books %>%
unnest_tokens(word, text)
tidy_books

data(stop_words)

tidy_books<- tidy_books %>%
  anti_join(stop_words)

tidy_books %>%
  count(word, sort = TRUE)

tidy_books %>%
  count(word, sort= TRUE) %>%
filter(n>600) %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n)) +
geom_col() +
xlab(NULL) +
coord_flip()

hgwells <- gutenberg_download(c(35, 36, 5230, 159))

tidy_hgwells <- hgwells %>%
  unnest_tokens(word, text) %>%
  anti_join(stop_words)

tidy_hgwells %>%
count(word, sort=TRUE) 

bronte <- gutenberg_download(c(1260, 768, 969, 9182, 767))  

tidy_bronte <- bronte %>%
unnest_tokens(word, text) %>%
anti_join(stop_words)

tidy_bronte %>%
count(word, sort=TRUE)

frequency <- bind_rows(mutate(tidy_bronte, author="Bronte Sisters"),
                   mutate(tidy_hgwells, author = "H.G. Wells"),
                   mutate(tidy_books, author = "Jane Austen")) %>%
        mutate(word = str_extract(word, "[a-z']+")) %>%
        count(author, word) %>%
        group_by(author) %>%
                 mutate(proportion = n / sum(n)) %>%
                 select(-n) %>%
                 spread(author, proportion) %>%
                 gather(author, proportion, 'Bronte Sisters':'H.G. Wells')
   frequency

Но когда я запускаю этот код:

ggplot(frequency, aes(x=proportion, y='Jane Austen', 
                  color=abs('Jane Austen' - proportion))) +
geom_abline(color="gray40", lty=2) +
geom_jitter(alpha=0.1, size=2.5, width=0.3, height=0.3) +
geom_text(aes(label= word), check_overlap=TRUE, vjust=1.5) +
scale_x_log10(labels= percent_format()) +
scale_y_log10(labels= percent_format()) +
scale_color_gradient(limits= c(0, 0.001), 
                   low= "darkslategray4", high = "gray75") +
facet_wrap(~author, ncol=2) +
theme(legend.position="none") +
labs(y="Jane Austen", x=NULL) 

Я получаю эту ошибку: Ошибка в «Джейн Остин» - пропорция: нечисловой аргумент для двоичного оператора

Это структура частоты:

> str(frequency)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   57818 obs. of  4 variables:
 $ word       : chr  "a" "a'most" "a'n't" "aback" ...
 $ Jane Austen: num  9.19e-06 NA 4.60e-06 NA NA ...
 $ author     : chr  "Bronte Sisters" "Bronte Sisters" "Bronte Sisters" 
               "Bronte Sisters" ...
 $ proportion : num  3.19e-05 1.59e-05 NA 3.98e-06 3.98e-06 ...

Пропорция и Джейн Остин имеют числовые значенияно есть и АН.Я попытался удалить их, но это не помогло, плюс я подумал, что книга могла бы поднять это как потенциальную проблему.

Это библиотеки, которые я использую.Когда я запускаю их, я не вижу никаких конфликтов, которые могли бы маскировать функцию:

library(dplyr)
library(tidytext)
library(janeaustenr)
library(stringr)
library(tidyr)
library(ggplot2)
library(gutenbergr)
library(scales)

Я использую RStudio версии 1.1.442 на Windows 10. Я использую R 3.4.4

Есть идеи, что может быть не так?

1 Ответ

0 голосов
/ 24 апреля 2018

Ваша проблема легко игнорируется. Вам нужны пометки вокруг Джейн Остин, а не цитаты. Джейн Остин в данном случае не имя, а имя столбца в frequency. И имена столбцов с пробелом должны иметь обратную косую черту.

Должно быть:

ggplot(frequency, aes(x = proportion, y = `Jane Austen`, color = abs(`Jane Austen` - proportion))) +
.....

не

ggplot(frequency, aes(x=proportion, y='Jane Austen', color = abs('Jane Austen' - proportion))) +
.....
...