分析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
但是,现在我看不到失败的步骤。由于j
和y
均未记录!
> j
Error: object 'j' not found
> y
Error: object 'y' not found
您对此有何建议?我知道这是一个简单的例子。但是实际上,我要处理的事情更加复杂,并且很难找到错误步骤。
谢谢!
答案 0 :(得分:1)
如果使用RStudio,最简单的方法是在菜单中激活:“调试”>“错误时”>“代码中断”。
这将在错误时打开浏览器,您将能够看到j的值。
如果您不使用RStudio,则可以设置options(error = recover)
,这也会在出现错误时打开浏览器。 (在您的特定情况下,选择第3帧,您将可以看到j的值)