我是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
您知道我如何解决此问题吗?
答案 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)
}