R rtweet: цикл search_tweets не продолжается, если для данного дескриптора Twitter не возвращены результаты - PullRequest
0 голосов
/ 06 июня 2018

У меня есть дата-фрейм из твиттера.Когда я перебираю маркеры с помощью функции search_tweets, цикл перестает собирать твиты, если один из маркеров Twitter не возвращает никаких результатов.

Я хотел бы построить цикл таким образом, чтобы, если результаты не возвращались, он игнорирует дескриптор и переходит к следующему.

Мой фрейм данных дескриптора выглядит так:

handles=data.frame(`Twitter Handle`=c("@_CHKD","@AIDHC","@BannerChildrens","@BaptistOnline"))

И цикл выглядит так:

# Loop through the twitter handles & store the results as individual dataframes
for(handle in twitter_handles) {
  result <- search_tweets(handle, n = 3500 , include_rts = FALSE,retryonratelimit = TRUE)
  result$`Twitter Handle` <- handle
  result$Source <- "Search"

  df_name <- paste(tolower(substring(handle, 2)),"_search")

  if(exists(df_name)) {
    assign(df_name, unique(rbind(get(df_name), result)))
  } else {
    assign(df_name, result)
  }
}

КогдаЯ запускаю цикл, он выдает следующую ошибку после того, как обнаруживает дескриптор, который ничего не возвращает:

Ошибка в fix.by (by.x, x): 'by' должен указывать уникально допустимый столбец

Я пытался найти решение в Интернете, но мне это не удалось.Любые указатели были бы очень полезны.

1 Ответ

0 голосов
/ 07 июня 2018

Так что для меня я не вижу ошибки, когда я search_tweets для дескриптора без твитов (то есть "@BannerChildrens"), вместо этого я возвращаю пустой data.frame длины 0. Добавляя оператор if, выМожно исключить все ручки без твитов.Следующий код возвращает три кадра данных ("@_CHKD", "@ AIDHC", "@ BaptistOnline"), которые находятся в моей глобальной среде, без ошибок.

handles=data.frame(`Twitter Handle`=c("@_CHKD","@AIDHC","@BannerChildrens","@BaptistOnline"), stringsAsFactors = FALSE)


for(handle in handles$Twitter.Handle) {

  result <- search_tweets(handle, n = 3500 , include_rts = FALSE,retryonratelimit = TRUE)

  if(length(result) != 0){
    result$`Twitter Handle` <- handle
    result$Source <- "Search"

    df_name <- paste0(tolower(substring(handle, 2)),"_search")

    if(exists(df_name)) {
      assign(df_name, unique(rbind(get(df_name), result)))
    } else {
      assign(df_name, result)
    }
  }
}
...