简体   繁体   English

如何使用“tryCatch”跳过 R 中嵌套循环中的错误?

[英]How to use “tryCatch” to skip errors in a nested loop in R?

I am trying to load a few data with a nested-loop using pageviews .我正在尝试使用pageviews使用嵌套循环加载一些数据。 You already helped me get this result:你已经帮我得到了这个结果:

library("pageviews")

lang = c("it.wikipedia")
bm = c("ECB","Christine Lagarde")

x <- list(
    list(),
    list(),
    list(),
    list(),
    list()
    ) # store results

for (i in seq_along(lang)) {
  for (j in seq_along(bm)) {
        
x[[i]][[j]] = article_pageviews(project = lang[i], article = bm[j], platform = "all", user_type = "user", start = "2015100100", end = today(), reformat = TRUE, granularity = "daily")
  
  }
}

The last step I need to do, however, involves reading some article for which project doesn't exist.然而,我需要做的最后一步是阅读一些project不存在的article Find an example below:在下面找到一个例子:

lang = c("it.wikipedia")
bm = c("Philip Lane")

    
x = article_pageviews(project = lang, article = bm, platform = "all", user_type = "user", start = "2015100100", end = today(), reformat = TRUE, granularity = "daily")
 
# Error in FUN(X[[i]], ...) : 
#  The date(s) you used are valid, but we either do not have data for those date(s), or the project you asked for is not loaded yet.  Please check https://wikimedia.org/api/rest_v1/?doc for more information.

I would like to add this to the loop.我想将此添加到循环中。 I tried a few solutions but I don't manage to make the loop skip over if there is an error.我尝试了一些解决方案,但如果出现错误,我无法让循环跳过。 I post below one mistaken attempt:我在一个错误的尝试下面发布:

lang = c("it.wikipedia")
bm = c("ECB", "Christine Lagarde", "Philip Lane")

for (i in seq_along(lang)) {
  for (j in seq_along(bm)) {
    
  skip_to_next <- FALSE
    
  tryCatch(x[[i]][[j]] = article_pageviews(project = lang[i], article = bm[j], platform = "all", user_type = "user", start = "2015100100", end = today(), reformat = TRUE, granularity = "daily"), error = function(e) {skip_to_next <<- TRUE})
  
    if(skip_to_next) { next }     

  }
}


Can anyone help me run the loop and skip whenever it meets an error?任何人都可以帮我运行循环并在遇到错误时跳过吗?

Thanks a lot!非常感谢!

You can use tryCatch as:您可以将tryCatch用作:

library(pageviews)
library(purrr)

lang = c("it.wikipedia")
bm = c("ECB", "Christine Lagarde", "Philip Lane")

map_df(lang, function(x) map_df(bm, function(y) 
  tryCatch(article_pageviews(project = x, article = y, platform = "all", user_type = "user", start = "2015100100", end = today(), reformat = TRUE, granularity = "daily"), 
           error = function(e) {}))) -> result

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM