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

У меня есть датафрейм из твиттера. Когда я перебираю ручки, используя 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 ответ

Решение

Так что для меня я не вижу ошибки, когда я 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)
    }
  }
}
Другие вопросы по тегам