Я использую RStudio; У меня есть script1, импортирующий script2 с source
; функция в script2 вызывает ошибку. В первый раз, когда это происходит, Rstudio сообщает мне, что скрипт 1 в строке x вызвал ошибку в script2 в строке y. Если я перезапущу его, он только скажет мне об ошибке в script2. Зачем? Это может сделать отладку гораздо более болезненной, чем нужно.
Подробнее:
У меня есть файл myfun.R
, который содержит эту функцию (конечно, это просто игрушечный пример):
sum_2_nums <- function(x,y) {
out <- x + y
return(out)
}
Затем я импортирую функцию в другой файл, используя source
:
source("myfun.R")
mysum <- sum_2_nums(3,"hello")
RStudio установлен на debug -> on error -> error inspector
. Когда я запускаю код выше, я вижу:
![enter image description here](https://i.stack.imgur.com/mtyyj.png)
, который говорит мне, что ошибка в myfun.R, строка 12, была вызвана try_traceback.R, строка 13. Отлично.
Однако, если я снова запускаю скрипт, я получаю:
![enter image description here](https://i.stack.imgur.com/29Njo.png)
т.е. ошибка больше не возвращается к try_traceback.R
. Мне нужно набрать traceback()
в консоли, чтобы увидеть это. Зачем? Различное поведение во второй раз действительно озадачивает меня. Это делает отладку излишне более болезненной, чем она должна быть! Есть ли способ избежать этого?
Примечание Этот вопрос , а не Дубликат Этот : они могут выглядеть аналогично, но ответ на вопрос об использовании echo=TRUE
или verbose=TRUE
не адрес моей точки зрения об отслеживании ошибки до первого файла .R.
Я видел тот же вопрос здесь , но он остается без ответа.
Редактировать
Для уточнения, в ответ на некоторые комментарии:
как я уже сказал, если я нажимаю на Отладка -> на Ошибка -> я вижу, что отмечен флажок «Инспектор ошибок».
если я наберу options(error=function()traceback(1))
в консоли, на экране ничего не произойдет, но «Инспектор ошибок» не будет выбран
В моем коде больше ничего нет. Это пример с игрушками, на которых я только что показал, и больше ничего. Я не знаю, что еще я могу уточнить - любое руководство будет наиболее ценно.
Я очень плохо знаком с R. Я использую Python для анализа данных, но мне любопытно понять, что такое R. Я слышал, что отладка в R намного более громоздка, и хотел попробовать сам. Допустим, я не собираюсь тратить много времени на изучение R, если хотя бы отслеживание такой банальной ошибки настолько проблематично, поэтому я хотел бы понять, что я делаю что-то не так, или отладка и отслеживание всегда это в R
когда я говорю «запустить», я имею в виду, что я нажимаю кнопку «источник» в RStudio (кнопка рядом с «запустить»
sessionInfo () показывает:
sessionInfo() R version 3.5.3 (2019-03-11) Platform:
x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale: [1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages: [1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.3 tools_3.5.3 yaml_2.2.0
Edit # 2 (в ответ на ответ Duckmayr)
Давайте, может быть, сделаем шаг назад. В Python я всегда видел довольно подробный след того, что называется, когда возникает ошибка. Например. когда я вижу что-то подобное, я нахожу это очень полезным:
![enter image description here](https://i.stack.imgur.com/onpkp.png)
Первый скриншот, который я опубликовал в R studio, очень похож и полезен. Таким образом, мой ожидаемый вывод будет заключаться в получении полного отслеживания каждый раз, когда происходит ошибка.
Почему? Потому что это наиболее полезно для меня; какие могут быть преимущества НЕ показывать его каждый раз? Я не понимаю.
Вместо этого вы говорите, что по замыслу полный возврат не указывается каждый раз? Если так:
- Почему? Есть ли фундаментальная причина, по которой я скучаю? Есть ли сценарий, в котором это имеет больше смысла, чем то, к чему я привык в Python?
- Это где-нибудь задокументировано? Я не смог его найти.
- Есть ли способ получить полную обратную связь каждый раз? Настройка, чтобы изменить? Будет ли выход и открытие RStudio делать?
Да, я понимаю, что всегда могу набрать traceback (), но поведение Python, показывающее полный возврат каждый раз, гораздо удобнее - я искренне не понимаю, каковы преимущества показа traceback только в первый раз.