gpt4 book ai didi

r - 如果出错,则在 R 中的 for 循环中进行下一次迭代

转载 作者:行者123 更新时间:2023-12-04 16:24:22 26 4
gpt4 key购买 nike

如果 for 循环中的操作出错,我正在寻找一种简单的方法来继续 R 中 for 循环中的下一次迭代。

我在下面重新创建了一个简单的案例:

for(i in c(1, 3)) {
test <- try(i+1, silent=TRUE)
calc <- if(class(test) %in% 'try-error') {next} else {i+1}
print(calc)
}

这正确地给了我以下计算值。
[1] 2
[1] 4

但是,一旦我更改 i 中的向量以包含非数字值:
for(i in c(1, "a", 3)) {
test <- try(i+1, silent=TRUE)
calc <- if(class(test) %in% 'try-error') {next} else {i+1}
print(calc)
}

这个 for 循环不起作用。我希望得到与上面相同的计算值,向量不包括 i 中的非数字值。

我尝试使用 tryCatch 如下:
for(i in c(1, "a", 3)) {
calc <- tryCatch({i+1}, error = function(e) {next})
print(calc)
}

但是,我收到以下错误:
Error in value[[3L]](cond) : no loop for break/next, jumping to top level 

有人可以帮助我理解如何使用 R 中的 for 循环来实现这一点吗?

最佳答案

正如 Dason 所指出的,原子向量确实不是存储混合数据类型的最佳方式。列表就是为了这个。考虑以下:

l = list(1, "sunflower", 3)

for(i in seq_along(l)) {
this.e = l[[i]]
test <- try(this.e + 1, silent=TRUE)
calc <- if(class(test) %in% 'try-error') {next} else {this.e + 1}
print(calc)
}

[1] 2
[1] 4

换句话说,您以前的循环“有效”。它总是失败并进入下一次迭代。

关于r - 如果出错,则在 R 中的 for 循环中进行下一次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39372722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com