Maximilian Kofler wrote:
Duncan Murdoch <murdoch.duncan <at> gmail.com> writes:
I doubt if that was the error message. More likely you saw
Error: evaluation nested too deeply: infinite recursion /
options(expressions=)?
Exactly this was the error message I recieved
This isn't a case of the source being nested to deeply, but rather of the
evaluation being nested too deeply.
This happens in recursive algorithms when R runs out of
stack space, around 5000 calls deep. Is it likely in your dataset that
a recursion depth of 5000 is reasonable? In most cases this indicates a
programming error that leads to an infinite recursion, but there are
probably cases where a depth like that is reasonable.
I don't think that it is a programming error, because I succeyyfully
calculated subgraph isomirphism with the algorithm, but with
smaller input graphs.
The programming error might be in the design, not the implementation.
For example, you can sum a vector like this:
badSum <- function(x) {
if (length(x) > 1) x[1] + badSum(x[-1])
else x
}
and you'll get the right result for vectors of lengths from 1 up to
around length 5000, but not for bigger ones. The solution in some
languages is to recognize when recursion is being used unnecessarily and
to optimize it away, but R doesn't do that. So the programmer has to
recognize when recursion isn't really needed and rewrite the function to
work without it. For example, in the case above, we don't need x after
extracting x[1], so there's no need to make a new call to badSum (which
preserves it). Just turn it into a loop:
notsobadSum <- function(x) {
result <- x[1]
while (length(x) > 1) {
x <- x[-1]
result <- result + x[1]
}
result
}
(This is still a bad way to compute a sum in R, it is just a simple
illustration).
So the algorithm seems to work.
I already tried to set options(expressions=500000), but
then I cause a protection stack overflow:
error: protect(): protection stack overflow
Is the problem that too many objects are stored in the stack?
Too many stack frames. You're not running out of memory, you're running
out of a particular type of memory. When you set expressions to 500000
you just started to run out of a different resource. The help page
?options tells you how to work around that one, but I suspect you really
need to rewrite your functions so they only recurse
when they need to.
Duncan Murdoch
If yes, somebody knows how to solve this
problem?
thanks for your replies
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.