转义for循环中的错误并移动到下一次迭代

vtwuwzda  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(118)

下面是我尝试使用的代码:data是我试图创建的一个巨大的 Dataframe ,data2是一个小的输出,它是为一个特定的链接返回的。这些链接我从一个名为df的不同 Dataframe 中阅读。

data <- data.frame()
for(i in 1:length(df$Link))
{data2 <- try(get_caption(df$Link[i]), silent = TRUE)
data2$videoId <- df$videoId[i]
 data2$channelId<-df$channelId[i]
data <- rbind(data,data2)
i<- i+1
Sys.sleep(5)
}

我的问题是,当有一个错误,我通过使用try命令转义,数据2不会生成和data2$videoID给出了一个错误。我想要的东西,这将有助于我转义错误,以及以下两行时,有一个错误。

data2$videoId <- df$videoId[i]
data2$channelId<-df$channelId[i]
2ic8powd

2ic8powd1#

您的问题可以通过使用tryCatch而不是try来解决。这样,当出现错误时,您将遇到错误情况,可以测试它并相应地继续。

data <- data.frame()
for(i in 1:length(df$Link)){
  data2 <- tryCatch(get_caption(df$Link[i]), error = function(e) e)
  if(!inherits(data, "error")) {
    data2$videoId <- df$videoId[i]
    data2$channelId<-df$channelId[i]
    data <- rbind(data,data2)
  }
  Sys.sleep(5)
}

另一种方法是使用*apply循环来运行函数get_caption,并测试哪些运行良好。主要优点是使用相同的索引变量(bad)创建一个错误列表和要保留的内容。两个为一个的价格。

data <- lapply(seq_along(df$Link), \(i) {
  Sys.sleep(5)
  tryCatch(get_caption(df$Link[i]), error = function(e) e)
})
bad <- sapply(data, inherits, "error")
errors_list <- data[bad]

data2 <- do.call(rbind, data[!bad])
data2$videoId <- df$videoId[!bad]
data2$channelId <- df$channelId[!bad]

相关问题