Цикл в R с включенной функцией - PullRequest
0 голосов
/ 05 марта 2019

Я очень новичок в R, и я хотел бы сделать цикл, чтобы вернуть объем поиска (через вызов API) для списка ключевых слов.

Вот код, который я использовал:

install.packages("SEMrushR")
library(SEMrushR)

mes_keywords_to_check <- readLines("voyage.txt") # List of keywords to check
mes_keywords_to_check <- as.character(mes_keywords_to_check)

Loop

for (i in 1:length(mes_keywords_to_check)) {
  test_keyword <- as.character(mes_keywords_to_check[i])
  df_test_2 <- keyword_overview_all(test_keyword, "fr","API KEY NUMBER")  ##keyword_overview_all is the function from the Semrush package

}

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

Вот таблица, которую я получаю: введите описание изображения здесь

У вас естьЛюбая идея, как я мог решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Похоже, что вы читаете в текстовом файле с readLines("voyage.txt"), который будет возвращать список каждой строки.Эти строки затем передаются в цикл for.Ниже будут преобразованы строки в слова.Существуют различные подходы, но ниже используется цикл внутри цикла, чтобы продолжать использовать for () и в случае, если вы предпочитаете искать построчно слово за словом.Он также использует регулярное выражение для разделения на не алфавитно-числовые значения, поэтому вы пропускаете слова, ограниченные пунктуацией.

mes_lines <- readLines("voyage.txt") # List of keywords to check
mes_lines <- as.character(mes_lines)

search_results <- list()
for (i in 1:length(mes_lines)) {
  mes_keywords_to_check <- unlist(strsplit(mes_lines,"[^[:alnum:]]"))
  mes_keywords_to_check <- mes_keywords_to_check[nchar(mes_keywords_to_check)>0]

  if (length(mes_keywords_to_check)==0) next

  for (w in 1:length(mes_keywords_to_check))
  {
    test_keyword <- as.character(mes_keywords_to_check[w])
    print(paste0("Checking word=",test_keyword))
    df_test_2 <- keyword_overview_all(test_keyword, "fr","API KEY NUMBER")  ##keyword_overview_all is the function from the Semrush package
    search_results <- append(search_results,df_test_2)
  }

}

search_results

0 голосов
/ 05 марта 2019

Спасибо за указание в правильном направлении.

Вот что я сделал, и это работает:

final_result <- data.frame()
mes_keywords_to_check <- readLines("voyage.txt") 
mes_keywords_to_check <- as.character(mes_keywords_to_check)

for (i in 1:length(mes_keywords_to_check)) {
  test_keyword <- as.character(mes_keywords_to_check[i])
    df_test_2 <- keyword_overview_all(test_keyword, "fr","API KEY")  
  final_result <- rbind(final_result,df_test_2)
}
0 голосов
/ 05 марта 2019

Ну, вам нужно добавить свои результаты в какой-то контейнер.например в список.На данный момент у вас есть только один объект, который заполняется данными из последней итерации вашего цикла.

results = list()

for (i in 1:length(mes_keywords_to_check)) {
  test_keyword <- as.character(mes_keywords_to_check[i])
  df_test_2 <- keyword_overview_all(test_keyword, "fr","API KEY NUMBER")  ##keyword_overview_all is the function from the Semrush package
  results[[i]] <- df_test_2 
}

Но большинство экспертов R рекомендовали бы воздержаться от использования цикла

library("plyr")
result <- plyr::ldply(mes_keywords_to_check, function(x) keyword_overview_all(as.character(x), "fr","API KEY NUMBER"))

Я не проверял это, и, вероятно, требуется некоторая настройка, но он должен указать вам направильное направление.

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