mhahsler / arules

Mining Association Rules and Frequent Itemsets with R
http://mhahsler.github.io/arules
GNU General Public License v3.0
194 stars 42 forks source link

reached CPU time limit error #22

Closed kliegr closed 7 years ago

kliegr commented 7 years ago

With the new version of arules (1.5-0) I am sometimes getting error "reached CPU time limit".

In my evaluations on 27 UCI datasets, I get it on waveform-5000 (MDLP-discretized) with the following setting: confidence = 0.5 , support = 0 , minlen = 2 , maxlen = 4, maxtime=102 (i.e. the new feature turned off). I always get it during 10 fold crossvalidation, but each time on a different fold.

The same setup with the previous version of arules worked fine. This error is distinct from the new warning related to maxtime.

mhahsler commented 7 years ago

What is the exact error message? Yours sounds like someone used setTimeLimit(). arules does not set this because it only applies to top-level computations.

http://stackoverflow.com/questions/17819790/reached-cpu-time-limit-in-r

kliegr commented 7 years ago

I am not myself calling setTimeLimit(), but I am wrapping arules into evalWithTimeout() (I am aware of the new maxtime parameter), which might be doing that or something similar.

Before I updated R (arules, but also some other packages) exceeding time limit set in evalWithTimeout always produced only the TimeoutException, which is the correct exception according to the evalWithTimeout doc.

Now, I am getting mostly this new exception of class "simpleError", and only scarcely the TimeoutException. The exact message (err$message) of the new "simpleError" exception is "reached CPU time limit".

I already have a workaround/error handler for the new exception type, and as you write, this problem is likely unrelated to changes in arules. It may be caused by some other update in my R installation, possibly the error might be also somewhere on my side. It is nothing important.

mhahsler commented 7 years ago

Maybe the developer of R.util has changed something in withTimeout(). It looks like you can specify if it throws an error when a timeout happens. However, the timeout does not work for the actual apriori call (since it uses C code). This is why I have introduced the new maxtime parameter.