У меня есть следующий код для получения воспроизводимой ошибки:
cc <- function(){
a(2)
}
a <- function(b){
x <- rep(NA, 3)
for(nr in 1:3){
x[nr] <- nr
}
a*2
}
cc()
(Обратите внимание, что это примерная ошибка, мне не интересно ее решать. Это лишь минимальный воспроизводимый пример, который позволяет мне есть пример, когда мы попадаем в режим отладки).
Я использую RStudio с настройками отладки: «Взлом в коде» (Отладка - При ошибке - Разрыв в коде).
Во время отладки я хочу запустить для l oop, но я не могу:
> cc()
Error in a * 2 : non-numeric argument to binary operator
Called from: a(2)
Browse[1]> x <- NULL
Browse[1]> for(nr in 1:3){
+ x[nr] <- nr
+ }
debug at #2: x[nr] <- nr
Browse[4]> x
NULL
Вопрос:
Как я могу запустить циклы for, если утверждения, в то время как и др. c. в режиме отладки (и сохранить соответствующие результаты в «среде отладки»)?
(если быть точным, я могу запустить код, как видно из примера выше. Но значение x не меняется ).
Редактировать: Зачем мне это нужно?
Иногда я сталкиваюсь с непредвиденной ошибкой в моем коде и лучше понимаю ее, выполняя sh для выполнения Код до / после этого определяет c «часть ошибки» моего кода. Это прекрасно работает, за исключением того, что результаты запуска for l oop не сохраняются во «Среде временной отладки», как показано в примере.
Таким образом, замена for l oop на sapply или аналогичную не решит его, так как тот же вызов будет иметь место, пока, если, et c.
Что я пробовал:
browser()
можно установить в течение 1 oop. Но я бы не хотел устанавливать это заранее. Мне также не нужно прерывать в определенной точке этого для l oop?. - , используя
recover()
Я бы ожидал, что Контент в al oop я не могу получить доступ к дополнительной среде через recover()
, ...
Попытка следовать решению Джеймса Керрана:
> debug(cc)
> cc()
debugging in: cc()
debug at
#1: {
a(2)
}
Browse[2]> debug(a)
Browse[2]> a(2)
debugging in: a(2)
debug at #1: {
x <- rep(NA, 3)
for (nr in 1:3) {
x[nr] <- nr
}
a * 2
}
Browse[4]> x <- rep(NA, 3)
Browse[4]> for(nr in 1:3){
+ x[nr] <- nr
+ }
debug at #2: x[nr] <- nr
Browse[5]> a*2
Error in a * 2 : non-numeric argument to binary operator
Browse[7]> x
[1] NA NA NA
Кажется, я не изменил X, (Надеюсь, я правильно следовал инструкциям).