gpt4 book ai didi

r - 使用 Rstudio : different output every time 的 traceback() 的不稳定行为

转载 作者:行者123 更新时间:2023-12-03 01:16:57 25 4
gpt4 key购买 nike

我使用 RStudio;我有 script1 用 source 导入 script2 ; script2 中的函数导致错误。第一次发生时,Rstudio 告诉我第 x 行的脚本 1 导致第 y 行的脚本 2 出现错误。如果我重新运行它,它只会告诉我 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

这告诉我 myfun.R 第 12 行中的错误是由 try_traceback.R 第 13 行引起的。太好了。

但是,如果我再次运行脚本,我会得到:

enter image description here

即错误不再追溯到 try_traceback.R .我需要输入 traceback()在控制台中看到。为什么?第二次的不同行为真的让我感到困惑。这使得调试不必要地比它需要的更痛苦!有没有办法避免它?

备注 此问题与 this 不重复 :它们可能看起来相似,但那里给出的答案是使用 echo=TRUEverbose=TRUE没有解决我关于将错误跟踪到第一个 .R 文件的观点。

我看到了同样的问题 here ,但它仍然没有答案。

编辑

为了澄清,回答一些评论:
  • 就像我说的,如果我点击 Debug -> on Error -> 我看到“错误检查器”被打勾。
  • 如果我输入 options(error=function()traceback(1))在控制台中,屏幕上没有任何 react ,但“错误检查器”被取消选中
  • 我的代码中没有任何其他内容。这是一个玩具示例,只有我所展示的线条,没有别的。我不知道我还能澄清什么 - 任何指导将不胜感激。
  • 我对 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

    编辑 #2 (回复duckmayr的回答)

    让我们退后一步。在 Python 中,我习惯于在出现错误时总是看到一个相当详细的回溯。例如。当我看到这样的东西时,我觉得它很有帮助:

    enter image description here

    我发布的 R Studio 的第一个屏幕截图非常相似,并且同样有用。 所以我的预期输出是每次发生错误时都获得完整的回溯。

    为什么?因为那对我最有帮助;不每次都显示它可能有什么好处?我不明白。

    你是不是说每次都没有列出完整的回溯是设计使然?如果是这样的话:
  • 为什么?我失踪有什么根本原因吗?有没有比我习惯使用 Python 更有意义的场景?
  • 这在任何地方都有记录吗?我找不到。
  • 有没有办法每次都获得完整的回溯?要更改的设置?退出并重新打开 RStudio 会做吗?

  • 是的,我知道我总是可以输入 traceback(),但是 Python 每次显示完整回溯的行为要方便得多 - 我真的看不出只在第一次显示回溯的好处是什么。

    最佳答案

    我发现很难准确地获得您希望 RStudio 为您提供的行为,但是如果我发布一些有关预期的信息可能会对您有所帮助。

  • 并非每次都列出完整的回溯:根据我的经验,RStudio 仅在第一次以当前形式执行函数时自动打印完整的回溯。如果您更改代码,那么下一次调用也应该自动打印完整的回溯。此行为可能会或可能不会自动配置。 然而,更重要的是 :
  • R 函数 traceback()debug()无论 RStudio 的设置如何,您都可以随时使用!所以,我第一次source你的脚本,我看到了:

  • enter image description here

    那么如果我 source你的脚本没有其他任何改变,我得到:
    > source('~/try_traceback.R')
    Error in x + y : non-numeric argument to binary operator

    但是,这没有问题;我可以运行:
    > traceback()
    5: sum_2_nums(3, "hello") at try_traceback.R#2
    4: eval(ei, envir)
    3: eval(ei, envir)
    2: withVisible(eval(ei, envir))
    1: source("~/try_traceback.R")

    我也可以使用 debug(sum_2_nums)使用调试重新运行该功能。

    此外,如果我更改 sum_2_nums()myfun.R到以下几点:
    sum_2_nums <- function(x,y) {
    cat("")
    out <- x + y
    return(out)
    }

    我又看到了

    enter image description here

    当我尝试 source你的脚本。

    所以你可能不同意,但我认为在 R 中调试并不困难,只要记住函数 traceback()debug()你会没事的。

    关于r - 使用 Rstudio : different output every time 的 traceback() 的不稳定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55525206/

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