对于R中的故障步骤,对于循环vs Sapply

问题描述 投票:0回答:1

我在分析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
[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

你有什么建议吗?我知道这是一个简单的例子。但是我在现实中处理的事情更复杂,找到错误步骤变得更加困难。

提前致谢!

r for-loop sapply
1个回答
1
投票

如果您使用RStudio,最简单的方法是在菜单中激活:Debug> On Error> Break in code。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.