2

我在 R 中从 (1:1700) 运行 for 循环,但我在每次迭代中加载不同的数据。但是我在两者之间的一些迭代中遇到了错误(可能是因为缺少相应的数据)。

我想知道是否有任何方法可以跳过那些我得到错误的特定迭代,并且至少 for 循环应该完成所有 1700 次迭代,从而跳过上述显示迭代的错误。

我必须运行一个 for 循环,没有其他选择。

4

2 回答 2

4

Yoy 可以tryCatch在你的循环中使用。这是我从 1 循环到 5 的示例,对于某些计数器值,我得到一个错误(我在这里使用创建它stop),我捕获它,然后我继续计数器的其他值。

  for( i in 1:5) ## replace 5 by 1700
     tryCatch({
        if(i %in% c(2,5)) stop(e)
        print(i)   ## imagine you read a file here, or any more complicated process
        }
    ,error = function(e) print(paste(i,'is error')))

[1] 1
[1] "2 is error"
[1] 3
[1] 4
[1] "5 is error"
于 2013-07-05T08:09:51.220 回答
3

try用于此类问题。它允许您的循环继续循环值,而不会在错误消息处停止。

例子

制作数据

set.seed(1)
dat <- vector(mode="list", 1800)
dat
tmp <- sample(1800, 900) # only some elements are filled with data
for(i in seq(tmp)){
    dat[[tmp[i]]] <- rnorm(10)
}
dat

没有循环try

#gives warning
res <- vector(mode="list", length(dat))
for(i in seq(dat)){
    res[[i]] <- log(dat[[i]]) # warning given when trying to take the log of the NULL element
}

循环try

#cycles through
res <- vector(mode="list", length(dat))
for(i in seq(dat)){
    res[[i]] <- try(log(dat[[i]]), TRUE) # cycles through
}
于 2013-07-05T08:21:29.390 回答