就R

时间:2018-08-30 13:11:22

标签: r for-loop sapply

分析R中sapply中的错误时,我遇到了一个问题。

假设我有一个如下矩阵,

B <- matrix( 
  c(2, 4, 3, 1, 5, 7), 
  nrow=3, 
  ncol=2)

为了创建一些错误,我正在索引矩阵的边界之外。 (i in 1:5部分)

for (i in 1:5) {

    x <- B[1,i]^2
    if(i==1) {

        result <- x

    }else{

        result <- rbind(result,x)

    }
}

当然会出现这样的错误。

Error in B[1, i] : subscript out of bounds

但是,很难找到在哪个步骤出现错误。因此,如果我叫i;

> i
[1] 3

我很容易理解在遇到错误时要走哪一步。在这种情况下,发生这种情况的时间是i=3

但是,为了利用R中sapply函数的速度(由于速度不够,不建议使用循环),我将其使用如下;

sapply(1:5 ,function(j) {

       y <- B[1,j]^2

})

毫不奇怪,它给出了相同的错误。

Error in B[1, j] : subscript out of bounds

但是,现在我看不到失败的步骤。由于jy均未记录!

> j
Error: object 'j' not found
> y 
Error: object 'y' not found

您对此有何建议?我知道这是一个简单的例子。但是实际上,我要处理的事情更加复杂,并且很难找到错误步骤。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果使用RStudio,最简单的方法是在菜单中激活:“调试”>“错误时”>“代码中断”。

这将在错误时打开浏览器,您将能够看到j的值。

如果您不使用RStudio,则可以设置options(error = recover),这也会在出现错误时打开浏览器。 (在您的特定情况下,选择第3帧,您将可以看到j的值)