【问题标题】:C stack usage 7970960 is too close to the limitC 堆栈使用 7970960 太接近限制
【发布时间】:2021-02-17 13:50:06
【问题描述】:

我试图在 RStudio 中计算一个简单的指数函数,

> exp(1)

我收到以下错误消息:

错误:C 堆栈使用 7970960 太接近限制

现在我不能再在 RStudio 中运行任何指数计算了,但昨晚一切都很好!我尝试在常规 R 中做到这一点并且它有效。太奇怪了。我试图扩大终端的限制(我使用的是 Mac),但这似乎不是永久的..

计算会发生什么?有谁知道如何消除这个错误?

【问题讨论】:

  • 我可以在常规 R(不是 R studio)中运行“exp(1)”,但它在 R studio 中不起作用。
  • RStudio 中find("exp") 的结果是什么?
  • RStudio 只是一个 IDE,即一个花哨的脚本编辑器。在 R 控制台与通过 RStudio 绝对不会有不同的行为。
  • 是的,但是 OP 可以在不同的环境中工作,其中一个包含伪造的递归函数,而另一个不包含。

标签: r exponential


【解决方案1】:

您几乎可以肯定在您的搜索路径中的某个地方有一个名为exp 的虚假函数,它会调用自己。它可能在您的工作区(全局环境)中,或者(不太可能但可能)在您已加载的包中。 (也有可能 无限递归 以更复杂的方式定义,即不是exp() 调用自身,而是调用一些回调它的东西......)

find("exp") 的正常预期结果是

[1]“包:基础”

假设您在工作区中定义了递归exp 函数:

exp <- function(x) exp(x)

那么exp(1)就会给

错误:C 堆栈使用 7969716 太接近限制

find("exp") 将给予

[1] ".GlobalEnv" "package:base"

即在全局环境中有一个exp,R 在看到base 包中的内置函数之前会看到它。

如果您确实有这样的事情发生,启动一个新的 R 会话会有所帮助(除非对象位于会话开始时恢复的已保存工作区中),或者rm("exp")

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 2021-01-12
    • 2017-10-01
    • 2017-12-26
    • 2020-05-04
    • 2013-05-28
    • 1970-01-01
    • 2020-08-12
    • 2022-01-03
    相关资源
    最近更新 更多