这是我的代码。它产生无限循环,因为something
变量的值在捕获的错误中不会改变。应该这样吗?如何修复它以使something
的值更改为FALSE
?
something <- TRUE
counter <- 1
while(something){
print(counter)
tryTest = tryCatch(
{
arima(rep(1,3), order = c(1,0,0))
},
warning = function(w) {
print('this is warning')
print(w)
},
error = function(e) {
something <- FALSE
print('this is error')
print(e)
},
finally = {}
)
counter <- (counter +1)
}
答案 0 :(得分:1)
这是因为外部代码中的something
环境与您的lambda的something
环境不同:
function(e) {
something <- FALSE
print('this is error')
print(e)
}
因此,在lambda中设置something <- FALSE
实际上会在外部代码中设置不同的something
。要解决此问题,您可以1)使something
成为全局变量,或者2)创建一个使用something
的环境。
1)
assign("something", TRUE, env=globalenv())
设置变量和
get("something", env=globalenv())
访问变量。
您也可以用同样的方式在lambda中设置something
:
assign("something", FALSE, env=globalenv())
或
2)
首先创建一个新变量:
env=new.env()
然后以与以前类似的方式设置和访问您的变量:
assign("something", TRUE, env=env)
get("something", env=env)
您可以在lambda中指定something
:
assign("something", FALSE, env=env)
使用env
是可能的,因为R会将变量复制到子环境中。但是,如果您在子环境中设置变量(例如,当您执行`somethi