我在分析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
但是,现在我看不出我失败了什么步骤。既然没有记录j
和y
!
> j
Error: object 'j' not found
> y
Error: object 'y' not found
你有什么建议吗?我知道这是一个简单的例子。但是我在现实中处理的事情更复杂,找到错误步骤变得更加困难。
提前致谢!
如果您使用RStudio,最简单的方法是在菜单中激活:Debug> On Error> Break in code。
这将在出错时打开浏览器,您将能够看到j的值。
如果你不使用RStudio,你可以设置options(error = recover)
,它也会在出错时打开浏览器。 (在您的特定情况下选择第3帧,您将能够看到j的值)