Для ошибки пропуска цикла

Я хотел бы получить данные Google Trend через цикл for. Однако ошибка удерживает меня. После поиска по другим вопросам стека я все еще не могу заставить его работать. Рассматриваемый цикл:

a2p = for (i in dfurlnames$names1)
{ 
    x<- paste(i)
    gtrends_function3(x)
}

В моем цикле for я получаю следующую ошибку:

Error : res$status_code == 200 is not TRUE

Я использую следующие пакеты и функции:

Получите новые gtrendsR; devtools::install_github('PMassicotte/gtrendsR')

library(gtrendsR)

gtrends_function3 <- function(x)
{
    trend1 = gtrends(c(x), geo = c(""), time = "2014-01-05 2014-10-04")
    trend_df1 = ldply(trend1)
    return(as.numeric(trend_df1$hits))        
}

Список:

dfurlnames$names1 = Ang babaeng humayo, The Bad Batch, Une vie, La La Land,               
The Light Between Oceans, El ciudadano ilustre, Spira Mirabilis, La región 
salvaje, Nocturnal Animals

person nemja    schedule 29.03.2017    source источник
comment
Здесь недостаточно информации, чтобы знать наверняка. Вы можете выполнить свой код вручную, установив i <- dfurlnames$names1[1] (перебирая каждый в пределах dfurlnames), запустив gtrends(i, ...) (используя свои варианты) и выяснив, что вызывает проблему. Кстати: ваше использование paste и c здесь не нужно, ничего не делая.   -  person r2evans    schedule 30.03.2017
comment
Ошибка указывает на то, что HTTP-запрос по какой-то причине завершился неудачно. Возможно, у вас проблемы с именами.   -  person neilfws    schedule 30.03.2017
comment
Когда в цикле R for возникает ошибка, значение счетчика итератора остается в глобальной среде, поэтому вы должны просто ввести i в командной строке консоли, которая должна сказать вам, какой из dfurlnames$names1 вызывает проблему. (Этот список не похож на вывод, который можно было бы ожидать от R.)   -  person IRTFM    schedule 30.03.2017
comment
@neilfws Это правильно. Есть проблема с La región salvaje. Но как я могу заставить цикл возвращать NA или просто пропустить вызов Google Trends для этого имени и получить остальные результаты?   -  person nemja    schedule 30.03.2017


Ответы (1)


Код состояния 200 относится к протоколу HTTP, что указывает на то, что все прошло нормально. Вероятно, вы слишком быстро запрашиваете данные в цикле for. Добавьте команду сна, например:

Системный сон(1)

в вашем цикле for, чтобы замедлить работу. В качестве альтернативы используйте tryCatch для обхода:

a2p = for (i in dfurlnames$names1)
{ 
    tryCatch({
       x<- paste(i)
       gtrends_function3(x)
    }, error=function(e) {print(e)})
}
person thc    schedule 30.03.2017
comment
Код ошибки указывает, что для определенного значения код ответа НЕ 200. Проблема здесь в том, что я хотел бы пропустить это значение и продолжить цикл. - person nemja; 30.03.2017
comment
Кроме того, цикл for всегда возвращает null, поэтому нет смысла присваивать его переменной. - person thc; 30.03.2017