2014-10-07 65 views
2

当索引超过矢量/矩阵的尺寸时,R中的默认行为是返回NA。例如。R,如果索引超过矩阵尺寸,如何强制抛出错误/警告

> a = as.matrix(1:10) 
> a[11] 
[1] NA 

这在许多情况下是非常不方便的,因为代码一直运行时给出错误的结果,甚至没有发出警告。 有谁知道是否有可能在代码中更改此默认行为,以便在这些情况下引发错误或警告,而不是在索引超出矢量/矩阵的维度时返回NA?

+0

您可以使用stop()来停止执行并强制执行错误。我希望看到你想使用这个背景。如果在你的例子中实现'stop()',它会产生一个错误,但我不知道它是否会阻止任何循环或类似的计划执行。 – 2014-10-07 08:57:24

+0

我希望至少在某个代码的执行过程中进行R更改行为,以便使用超过矩阵的维度的索引的任何以下情况都会发出stop()而不是返回NA或至少发出警告()。 – Giuseppe 2014-10-07 09:00:57

+0

我需要类似于一行的东西放在代码的开头,这个选项对所有后续行都有效。 – Giuseppe 2014-10-07 09:02:19

回答

2

一个解决方案是让您在使用[对矩阵进行索引时使用两个参数(行和列),这对矩阵来说是更“正常”的事情。这种使用会触发一个错误:

a[11, 1] <- NA 
# Error in `[<-`(`*tmp*`, 11, 1, value = NA) : subscript out of bounds 
0

的另一种方式,假设你a[11]是一个脚本或功能的一部分,是把自己的错误检查。例如,

for (j in 1:20) { 
    ifelse(j <= length(a), a[j], cat('index out of bounds')) 
    }