我写了表格的递归函数

foo=function(vars,i=2){
  **do something with vars**
  if(i==length(vars)){
    return(**something**)
  }else{
    foo(vars,i+1)
  }
}
length(vars)大约是1500。执行它时,出现错误
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?

足够公平,所以我增加了
options(expressions=10000)

然后就可以了。

但是,当我阅读有关optionsexpressions=帮助文档时,我只是不明白它在说什么。此外,它表明



如果有人应该像我一样增加expressions参数,以及是否应该同时修改其他内容,那么有人可以告诉我怎么回事。

最佳答案

在这里开一些弯头... expressions -option设置将要计算的最大嵌套表达式数。对于深度递归,有时会超过默认值,并且增加该值通常可以解决该问题。但是,如果不这样做(给出新的错误消息),则可能需要额外增加保护堆栈的大小。计算机将有关 Activity 例程的信息存储在堆栈中。有时,当信息不太适合堆栈时,信息被写到堆栈边界之外,这很不好,因为它通常会产生例如内存访问问题。可以通过在启动R时设置选项--max-ppsize来纠正此问题。这就像 child 在 overdraw 当前纸张并给表上色时给其更大的纸张一样。

有关更多背景信息,请参见Wikipedia及其链接。有关R的命令行选项的详细信息,请参见An Introduction to R B.1节。

10-06 01:02