【问题标题】:R variable changes after (global) allocation(全局)分配后 R 变量更改
【发布时间】:2023-03-30 16:25:02
【问题描述】:

我在调试代码时遇到问题。代码如下所示。 所以,在我的 lapply 函数中出现了问题。为了确定错误,我将三个参数写入全局变量。但是发生了以下事情:列表长度(在第一次打印中)始终为 3(应该是),在第二次打印中,foo 的长度也为 3。完美。 在这些行之后,出现错误,执行中断,然后当我查看我的变量 foo 时,它的长度为 4,并且只有 vl 变量出现在 foo 中。 我在代码中的其他地方没有其他 foo 分配,这也是我正在使用的唯一全局变量。

我错过了什么?我无法解释自己的这种行为。

致以最诚挚的问候,

马里奥

.evalModel = function(model, vl, params){
  print(length(list(model, vl, params)))
  foo<<-list(model, vl, params)
  print(length(foo))
  modelPerformance = lapply(model, function(x){
    ruleResults = vector(mode="list", length = length(x) )
    for(i in 1:length(x)){
      if(class(x[[i]]) == "rule"){
        ruleResults[[i]] = .evalRule(x[[i]] , vl, params)
      } else{
        ruleResults[[i]] = .evalRule(x[[i]]$rule , vl, params)
      }
    }
    ruleResults
  })
  class(modelPerformance) = "GP-Model"
  return(modelPerformance)
}

【问题讨论】:

    标签: r global-variables


    【解决方案1】:

    browser()放在modelPerformance行之后,重新运行函数的定义并运行函数。您将“坐在” lapply 调用中,您将能够逐步浏览每一行,检查对象并查看发生了什么。此处描述了广泛的调试选项:General suggestions for debugging in R

    【讨论】:

    • 很好的提示,特别是options(error=recover) 非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多