Betrachten Sie den folgenden Code ein:variabler Bereich in R tryCatch Block: ist << - notwendig, um lokale Variable zu ändern, die vor tryCatch definiert wurde?
test1 <- "a"
test2 <- "a"
tryCatch(stop(), error= function(err){
print(test1)
print(test2)
test1 <- "b"
test2 <<- "b"
})
Ergebnis:
print(test1)
[1] "a"
print(test2)
[1] "b"
Der Wert der Variablen test1 ist sichtbar im TryCatch Block, aber es mit wechselnden "< -" Betreiber hat keinen Einfluss auf ihren Wert außerhalb der tryCatch-Block.
Wenn ein neuer Wert mit < < zugewiesen wird - hat dies den gewünschten Effekt. Warum?
Verwendet den < - Operator innerhalb des tryCatch-Blocks eine empfohlene Möglichkeit, den Wert einer lokalen Variablen außerhalb dieses Blocks zu ändern? Könnte es zu unerwarteten Nebeneffekten kommen?
EDIT: Beruht der folgende Code auf einer Bernhard-Antwort für den richtigen Ansatz für dieses Problem?
test1 <- "a"
test2 <- "a"
new_values<-tryCatch(
{
print("hello")
stop()
}
, error= function(err){
# I want to change the test1 and test 2 variables to "b" only if error occurred.
test1 <- "b"
test2 <- "b"
return(list(test1=test1,test2=test2))
})
if (is.list(new_values))
{
test1<-new_values$test1
test2<-new_values$test2
}
Ergebnis:
> print(test1)
[1] "b"
> print(test2)
[1] "b"
Es ist technisch in einer anonymen Funktion aufgerufen, wenn der Fehler auftritt. Alle traditionellen [Scoping-Regeln] (http://adv-r.had.co.nz/Functions.html#lexical-scoping) gelten. Während "<< -" stark davor gewarnt wird, ist es ein Hilfsmittel von R, um vernünftig verwendet zu werden. Es wird häufig beim Schreiben von Paketen benötigt und sollte in normalen Analysen/Skripten entweder stark kommentiert oder vermieden werden. – hrbrmstr