【问题标题】:Why I'm receiving "Object" not found within this function?为什么我收到此函数中未找到的“对象”?
【发布时间】:2020-11-18 09:44:17
【问题描述】:
query_averager <- function(arg1,
                           arg2) {
n = tibble()
   i = 1
   while (i <= 100) {
   n[i] <- cpquery(fitted = fitted_bn_01,
        event = (ret == "Acima da Selic") ,
        evidence = (solidez == arg1) & (resultado == arg2))
   i = i+1

   }
return (mean(n))
}

Query_result <- query_averager(arg1 = "1", arg2 = "Lucro acima da mediana")

这给了我“找不到对象 arg1”,但是当我在外面使用函数 cpquery() 时,它工作得很好。

没有 query_averager 函数的工作代码:

cpquery(fitted = fitted_bn_01,
    event = (ret == "Acima da Selic") ,
    evidence = (solidez == "1") & (resultado == "Lucro acima da median"))

我相信其他变量是什么并不重要,主要问题是为什么:

 solidez == "1"

有效,下面的代码 sn-p 无效:

solidez == arg1

【问题讨论】:

  • 函数cpquery从何而来?它是否使用惰性评估?当您在函数外使用cpquery 时,您是在使用变量还是在输入文字值?
  • retsolidezresultadofitted_bn_01 定义在哪里?如果您使用functional-programming 标记此内容,是否具有讽刺意味的是,此处建议的范围违规违反了它的某些原则,还是这里发生了其他事情?
  • cpquery 是来自 bnlearn 包的函数;我将使用我描述的工作代码编辑主要帖子。我不知道它是否使用惰性评估。 // 不知道函数式编程标签是否正确。可能只是新手的错误,如果是,请见谅xD
  • @YBS 同样的问题。我试过作为参数“1”和 1 传递,输出没有改变。
  • @MrFlick 现在我知道什么是惰性求值了,是的,它是惰性求值。

标签: r function parameter-passing bnlearn


【解决方案1】:

您的证据表达式中似乎没有任何变量,因为它们不会在函数体中进行评估。因此,您似乎必须在评估之前操作函数调用。我没有安装和工作这个包,但它似乎可以工作:

query_averager <- function(arg1, arg2) {
   n = tibble()
   i = 1
   while (i <= 100) {
   n[i] <- eval(substitute(cpquery(fitted = fitted_bn_01,
        event = (ret == "Acima da Selic") ,
        evidence = (solidez == arg1) & (resultado == arg2))))
   i = i+1

   }
  mean(n)
}

substitute() 部分将arg1arg2 的值注入到表达式中。然后我们使用eval() 评估该表达式。

【讨论】:

  • 完美答案,你知道我可以研究这种问题的任何参考吗?解决方案是完美的,但我不明白为什么。此外,我发现通用 {predict()} 函数具有 {method = "bayes-lw" , n = 100} ,它等同于 cpquery。
  • 大多数函数都不是这样工作的,所以这有点不寻常,所以有时你只需要猜测函数是否没有很好地记录。如果您还没有阅读“高级 R”的“元编程”部分,那么这可能是一个很好的起点。 adv-r.hadley.nz/metaprogramming.html 但是里面没有任何东西可以直接解决这个特定问题。
猜你喜欢
  • 2021-11-02
  • 2019-10-14
  • 1970-01-01
  • 2015-07-17
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
相关资源
最近更新 更多