就R中的故障步骤而言,For loop vs Sapply
在分析R中的就R中的故障步骤而言,For loop vs Sapply,r,for-loop,sapply,R,For Loop,Sapply,在分析R中的sapply中的错误时,我面临一个问题 假设我有一个矩阵,如下所示 B <- matrix( c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2) 当然,它会出现这样的错误 Error in B[1, i] : subscript out of bounds 然而,不难发现哪一步出错 > i [1] 3 我可以很容易地理解我在哪一步遇到了错误。在这种情况下,它发生在I=3时 然而,为了利用R中sapply函数的速度(因为由于速度
sapply
中的错误时,我面临一个问题
假设我有一个矩阵,如下所示
B <- matrix(
c(2, 4, 3, 1, 5, 7),
nrow=3,
ncol=2)
当然,它会出现这样的错误
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
})
然而,现在我不知道我在哪一步失败了。因为既不记录j
也不记录y
> j
Error: object 'j' not found
> y
Error: object 'y' not found
你有什么建议?我知道这是一个简单的例子。但是,我在现实中处理的事情更加复杂,更难找到错误步骤
提前谢谢 如果使用RStudio,最简单的方法是在菜单中激活:调试>出错>插入代码 这将在出错时打开浏览器,您将能够看到j的值
如果不使用RStudio,可以设置
选项(error=recover)
,这也会在出现错误时打开浏览器。(在您的特定情况下,选择第3帧,您将能够看到j的值)添加一个print
像sapply(1:5,函数(j){y@Jimbou,但在这种情况下,它会指定print(j)sapply输出结果的值。我的观点不是失去实际结果,在本例中为y。然后在修复sapply后删除它。或者返回循环。如果需要错误处理的点更复杂,则可以在应用的函数中处理错误。在函数开始时,可以有一个n如果ncol(B)>j不要尝试在y之前执行步骤
Error in B[1, j] : subscript out of bounds
> j
Error: object 'j' not found
> y
Error: object 'y' not found