在R中循环,包含一个功能

时间:2019-03-05 09:06:11

标签: r function api for-loop

我是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)

循环

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

}

这样做,我只会得到列表中第一个关键字的搜索量。我的目的当然是获取完整关键字列表所需的日期。

这是我得到的表: enter image description here

您知道我如何解决此问题吗?

3 个答案:

答案 0 :(得分:1)

好吧,您需要将结果添加到某种容器中。例如到列表。到目前为止,您只有一个对象,该对象中填充了循环的最新迭代中的数据。

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"))

我没有对此进行测试,它可能需要进行一些调整,但是它应该为您指明正确的方向。

答案 1 :(得分:0)

似乎您正在使用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

答案 2 :(得分:0)

感谢您指出正确的方向。

这是我所做的,并且正在工作:

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)
}