Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
下标越界的R if错误_R_If Statement_Error Handling - Fatal编程技术网

下标越界的R if错误

下标越界的R if错误,r,if-statement,error-handling,R,If Statement,Error Handling,我正在通过一个嵌套循环进行循环,但不确定当一个索引没有任何数据时如何处理 例如: A <- list(list(1,2), list(2), list(4,5)) 但是,以下方面失败了: for(i in 1:length(A)){print(A[[i]][[2]])} [1] 2 Error in A[[i]][[2]] : subscript out of bounds 我不能像以前那样简单地用if(is.null(…){“null”}else{…}包装它 是否有任何泛型if-er

我正在通过一个嵌套循环进行循环,但不确定当一个索引没有任何数据时如何处理

例如:

A <- list(list(1,2), list(2), list(4,5))
但是,以下方面失败了:

for(i in 1:length(A)){print(A[[i]][[2]])}
[1] 2
Error in A[[i]][[2]] : subscript out of bounds
我不能像以前那样简单地用
if(is.null(…){“null”}else{…}
包装它

是否有任何泛型if-error或Is-error函数,每当我得到下标越界错误时都会给出一个值?上面的示例可能不需要这样做,但我的数据有点复杂,我不知道如何复制它,但会显示我尝试循环的内容、空数据和结果时的外观:

for(i in 1:x$count){z=rbind.fill(z,data.frame(data=if(is.null(x$results[[i]]$experiences[[1]]$experience$A)){"Null"}else{x$results[[i]]$experiences[[1]]$experience$A}
空的:

x$results[[4]]$experiences
list()
结果:

x$results[[3]]$experiences
[[1]]
[[1]]$experience
[[1]]$experience$start
[1] "..."

[[1]]$experience$A
[1] "..."

[[1]]$experience$B
[[1]]$experience$B$A
[1] "..."


[[1]]$experience$C
[[1]]$experience$C$A
NULL

[[1]]$experience$C$B
NULL

[[1]]$experience$C$C
NULL



[[1]]$`_meta`
[[1]]$`_meta`$weight
[1] 1

[[1]]$`_meta`$`_sources`
[[1]]$`_meta`$`_sources`[[1]]
[[1]]$`_meta`$`_sources`[[1]]$`_origin`
[1] "..."





[[2]]
[[2]]$experience
[[2]]$experience$start
[1] "..."

[[2]]$experience$A
[1] "..."

[[2]]$experience$B
[[2]]$experience$B$C
[1] "..."


[[2]]$experience$C
[[2]]$experience$C$A
NULL

[[2]]$experience$C$B
NULL

[[2]]$experience$C$C
NULL



[[2]]$`_meta`
[[2]]$`_meta`$weight
[1] 1

[[2]]$`_meta`$`_sources`
[[2]]$`_meta`$`_sources`[[1]]
[[2]]$`_meta`$`_sources`[[1]]$`_origin`
[1] "..."





[[3]]
[[3]]$experience
[[3]]$experience$start
[1] "..."

[[3]]$experience$A
[1] "..."

[[3]]$experience$B
[[3]]$experience$B$A
[1] "..."


[[3]]$experience$C
[[3]]$experience$C$A
NULL

[[3]]$experience$C$B
NULL

[[3]]$experience$C$C
NULL



[[3]]$`_meta`
[[3]]$`_meta`$weight
[1] 1

[[3]]$`_meta`$`_sources`
[[3]]$`_meta`$`_sources`[[1]]
[[3]]$`_meta`$`_sources`[[1]]$`_origin`
[1] "..."

通常,您会使用
tryCatch
进行错误处理。例如,如果子集设置导致错误,则打印
NA

for(i in seq_along(A)){
  tryCatch(print(A[[i]][[2]]),
           error = function(e) print(NA))
}
#[1] 2
#[1] NA
#[1] 5
PS:像在实际代码中那样在循环中增长对象是一个主要的性能问题。学会预先分配


PPS:与其处理错误,不如避免它,例如,通过检查长度:
A[length(A)>1]

谢谢,我正在尝试,但不知道tryCatch
for(i in seq_along(A)){
  tryCatch(print(A[[i]][[2]]),
           error = function(e) print(NA))
}
#[1] 2
#[1] NA
#[1] 5