![](/img/trans.png)
[英]R for loop gives: Error in if (is.na(x)) return(0) else return(sign(x)) : argument is of length zero
[英]If there's an error in an R loop, return NA or zero and continue with the loop
我正在构建一个 R Shiny 应用程序,当引入错误时它会变得非常麻烦。 我有一个 dataframe 并且我正在使用 NLS function 循环遍历行并返回 EC50 值。 然后将 EC50 添加到原始 dataframe 中进行显示。 并非每个观察都适合,因此它会返回错误并且应用程序会中断。
我想要的是一种在出现错误时返回 NA 或 0 并让循环继续进行其他观察的方法。 代码的一个简单示例是
df <- data.frame(x = c(1,2,3), y = rep('hi',3))
addition <- function(a,b){
result <- a+b
return(result)
}
df$z <- 1
for (i in 1:length(df$x)){
df$z[i] <- addition(df$x[i], df[i,i])
}
我想要的结果如下:
X | 是的 | z |
---|---|---|
1 | 你好 | 2 |
2 | 你好 | 不适用 |
3 | 你好 | 6 |
这只是一个示例。 我正在做的事情更复杂,但我想返回 NA/0 任何类型的错误,并且由于它是用户上传的文件,我无法知道错误将出现在哪个索引中。
你可以在这里使用tryCatch
。 当捕获到错误时,它可以简单地返回一个NA
; 否则返回计算结果:
df <- data.frame(x = c(1,2,3), y = rep('hi',3))
df$z <- 1
for (i in 1:length(df$x)){
df$z[i] <- tryCatch(
addition(df$x[i], df[i,i]),
error = function(e) return(NA)
)
}
df
#> x y z
#> 1 1 hi 2
#> 2 2 hi NA
#> 3 3 hi 4
由代表 package (v2.0.1) 于 2022 年 8 月 10 日创建
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.