我写了表格的递归函数
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)
然后就可以了。
但是,当我阅读有关
options
的expressions=
帮助文档时,我只是不明白它在说什么。此外,它表明如果有人应该像我一样增加
expressions
参数,以及是否应该同时修改其他内容,那么有人可以告诉我怎么回事。 最佳答案
在这里开一些弯头... expressions -option设置将要计算的最大嵌套表达式数。对于深度递归,有时会超过默认值,并且增加该值通常可以解决该问题。但是,如果不这样做(给出新的错误消息),则可能需要额外增加保护堆栈的大小。计算机将有关 Activity 例程的信息存储在堆栈中。有时,当信息不太适合堆栈时,信息被写到堆栈边界之外,这很不好,因为它通常会产生例如内存访问问题。可以通过在启动R时设置选项--max-ppsize来纠正此问题。这就像 child 在 overdraw 当前纸张并给表上色时给其更大的纸张一样。
有关更多背景信息,请参见Wikipedia及其链接。有关R的命令行选项的详细信息,请参见An Introduction to R B.1节。