gpt4 book ai didi

r - 什么是 R 中值 [[3L]](cond) 的误差?

转载 作者:行者123 更新时间:2023-12-04 04:16:45 24 4
gpt4 key购买 nike

我有一个由于内存不足而出错的代码。实际上我在大数据上做了一个线性模型(lm)。问题不是因为它给了我我想要记录的错误,而是因为它包含 value[[3L]](cond) .

我的错误是这样的:

Error in value[[3L]](cond): While training model Error: cannot allocate vector of size 6.4 Gb

记录它的代码看起来像这样(使用日志库):
tryCatch({
# some code
tryCatch({
# some other code
}, warning = function(war){
logwarn(war, logger = "MyLogger")
}, error = function(err){
stop(paste("While training model", err, sep = " "))
})
some more code
}, error = function(err){
logerror(err, logger = "MyLogger")
})

我的问题是为什么它说 Error in value[[3L]](cond): ?我做错了什么而我不知道吗?不应该只是 Error: <error message> ?

最佳答案

您正在签发 stop()在你的内心 tryCatch ,并且在内部,当出现错误条件时,tryCatch()调用您提供的错误处理程序,它是列表中的第三个元素(在 tryCatch 内部)。它调用该处理程序传递条件 cond通过:value[[3L]](cond) .由于您的错误处理程序调用 stop,这就是调用最新错误的位置。

您可以使用 traceback() (隐式调用 print() )以查看错误处理程序中的调用堆栈,如下所示:

tryCatch({
stop('')
},error=function(err){
traceback()
})

产生:
5: print(where) at #4
4: value[[3L]](cond)
3: tryCatchOne(expr, names, parentenv, handlers[[1L]])
2: tryCatchList(expr, classes, parentenv, handlers)
1: tryCatch({
stop()
}, error = function(err) {
print(where)
})

如果您想保留原始错误中的调用堆栈但有更多信息丰富的错误消息,只需编辑错误并重新引发它:
  tryCatch({
# some other code
}, warning = function(war){
logwarn(war, logger = "MyLogger")
}, error = function(err){
# edit the error message
err$message <- paste("While training model", err, sep = " ")
# and re-raise
stop(err)
})

关于r - 什么是 R 中值 [[3L]](cond) 的误差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com