Фрейм данных, созданный из Search () эластичного в r, но получающий ошибку 'conn, должен быть объектом эластичного соединения при использовании результирующего кадра данных - PullRequest
0 голосов
/ 04 ноября 2019

Я использую эластичный пакет в R, номер версии Elasticsearch «6.8.3», а версия эластичного пакета - «1.0.0». У меня есть функция для поиска эластичных элементов на основе входного списка ключевых слов, а выходной файл представляет собой фрейм данных хитов $ хитов. Этот фрейм данных затем используется в другой функции, которая выполняет манипулирование данными и составляет график.

Однако, когда я использую результирующий фрейм данных в функции манипулирования данными, я продолжаю получать эту ошибку, когда запускаю определенный фрагмент функции манипулирования данными, в котором даже не упоминается эластичность: Error: 'conn' must be an elastic connection object; see ?connect

Вот эластичная функция:

keyword_search <- function(file) {
  library(elastic)
  library(readxl)
  library(rjson)
  library(magrittr)

  con <- connect(host = '10.0.53.250', port = 9200)

#file is an excel file with "keyword" in the first cell of the first column, #then one search term per cell going down the column
  the_terms <- read_excel(file)
  the_terms %>%
    na.omit() %>%
    as.list()
  r <- data.frame()

  for (t in the_terms$keyword) {
    print(t)
    result <- Search(con, index="cars", body = paste0('{"query": {"match_phrase" : {"body_":', '"', t, '"', '}}}'), asdf = TRUE, size = 5000)
    r <- rbind(r, result$hits$hits)
  }
icars <- r
return(icars)
}

Функция манипуляции с данными:

wordcloud_table  <- function(icars) {

  library(wordcloud2)
  library(dplyr)
  library(readxl)
  library(tidytext)
  library(wordcloud)
  library(tidyr)
  data(stop_words)
  source('stemmer.R')

  custom_stopwords <- c('1', '2', '3', '4', '5', '6', '7', '8', '9', '0',  'hey', 'hehe')

  custom_stopwords_df <- tibble(word = custom_stopwords)

  clean_cars_df <- icars %>% 
    dplyr::select(report_name, body_)

  tidy_cars<- clean_cars_df %>%
    unnest_tokens(word, body_)

  stopwords_df<- tibble(word = stopwords())

  tidy_cars <- tidy_cars %>%
    anti_join(stopwords_df)

  tidy_cars <- tidy_cars %>%
    anti_join(stop_words)

  tidy_cars <- tidy_cars %>%
    anti_join(custom_stopwords_df)

  wordcountdata <- tidy_cars %>% count(word)

  forwordcloud <- as.data.frame(wordcountdata)
  return(forwordcloud)
}

Затем я запускаю

icars <- keyword_search("keywords_onecol.xlsx")

wordcloud_table(icars)

Каждый раз, когда я получаюошибка объекта соединения 'conn прямо, когда код достигает wordcountdata <- tidy_cars %>% count(word) в функции wordcloud, и я не могу понять почему, потому что в этой функции нет conn, и это также очень случайно, чтобы он зависал на этой частикод и не самое первое использование tidy_cars. Надеюсь, кто-нибудь может помочь мне понять это, я в растерянности ...

Вот обратная связь:

12.
stop("'conn' must be an elastic connection object; see ?connect", 
    call. = FALSE) 
11.
is_conn(conn) 
10.
count(., word) 
9.
function_list[[k]](value) 
8.
withVisible(function_list[[k]](value)) 
7.
freduce(value, `_function_list`) 
6.
`_fseq`(`_lhs`) 
5.
eval(quote(`_fseq`(`_lhs`)), env, env) 
4.
eval(quote(`_fseq`(`_lhs`)), env, env) 
3.
withVisible(eval(quote(`_fseq`(`_lhs`)), env, env)) 
2.
tidy_cars %>% count(word) 
1.
wordcloud_table(icars) 

1 Ответ

0 голосов
/ 04 ноября 2019

У вас есть конфликтующие имена функций: elastic::count и dplyr::count. если оба пакета загружены, то один пакет переопределяет fxn другого с тем же именем. Вы можете легко исправить это, поместив в пространство имен функцию all, поэтому просто измените count() на dplyr::count (я предполагаю, что вы пытались использовать счетчик dplyr)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...