gpt4 book ai didi

r - 将循环中的警告消息保存到向量或数据框

转载 作者:行者123 更新时间:2023-12-01 12:43:40 24 4
gpt4 key购买 nike

如何将警告消息保存在循环内的向量或数据框中,以便它们可以与特定迭代相关联?

这是一个玩具示例,我想将操作( log(k) )的结果和警告消息(如果有)与数据( k )一起存储在数据框中:

dat <- data.frame(k=c(3,5,-2,7), logk=NA, warnMsg=NA)
for(i in 1:nrow(dat)){
w <- length(warnings())
dat$logk[i] <- log(dat$k[i])
#if new warning, assign to data frame
if(length(warnings()) > length (w)){
dat$warnMsg[i] <- warnings()[length(warnings())]
}
}

这似乎不起作用,因为在循环内生成的任何警告都不适用于 warnings()调用直到循环结束。我是否需要指定不同的环境来访问循环中的新警告?

我怀疑还有更好的方法可以使用 try() 完全做到这一点。或 tryCatch()但对我来说还不是很明显。

最佳答案

您可以使用 withCallingHandlers 完成您想要的事情。功能,像这样

withCallingHandlers({
for(i in 1:nrow(dat)){
w <- length(warnings())
dat$logk[i] <- log(dat$k[i])
}
}, warning = function(w){
dat$warnMsg[i] <<- w$message
invokeRestart("muffleWarning")
})

请注意,您需要 <<-警告处理程序中的运算符将消息分配给全局环境中的数据框,因为 <-将创建 dat 的本地副本在处理程序中并在退出时丢弃它。

关于r - 将循环中的警告消息保存到向量或数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21991728/

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