R 如何制作';对于循环';跳过一些显示错误的迭代?

R 如何制作';对于循环';跳过一些显示错误的迭代?,r,for-loop,R,For Loop,我在R中从(1:1700)运行for循环,但在每次迭代中加载不同的数据。但我在其间的一些迭代中遇到了错误(可能是因为缺少相应的数据) 我想知道是否有任何方法可以跳过那些我得到错误的特定迭代,并且至少for循环应该完成所有1700次迭代,跳过前面提到的错误显示迭代 我必须运行for循环,没有其他选择 您可以在循环中使用tryCatch。这里有一个例子,我从1循环到5,对于某些计数器值,我得到一个错误(我在这里使用stop)创建它),我捕获它,然后继续查找计数器的其他值 for( i in 1:

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

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


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

您可以在循环中使用
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"

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

例子 制作数据 循环使用
尝试

#循环通过

我怀疑你的最后一句话。您的问题的答案是函数
try
tryCatch
。如果您给出了一个可复制的示例,那么您可以仔细考虑
for
循环是否确实是唯一的选择。嘿,我如何在for循环中使用它?你能用一个简单的for循环来演示吗?“如何使用它呢?”阿尤什拉辛格我加了一个例子。
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
#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
}
#cycles through
res <- vector(mode="list", length(dat))
for(i in seq(dat)){
    res[[i]] <- try(log(dat[[i]]), TRUE) # cycles through
}