Update I had the chance to test the issue tonight using R version 2.12.2 on a Linux (Ubuntu 10.04.2, x86_64, kernel 2.6.32-32-generic) system:
It does also crash (with a support of 0.01 instead of 0.05 posted earlier) running eclat(Adult, parameter=list(support=0.01, tidLists=TRUE)) but I got some more information, which supports my initial guess: *** caught segfault *** address 0xa481b70, cause 'memory not mapped' Traceback: 1: .Call("reclat", items@p, items@i, items@Dim, parameter, control, data@itemInfo, PACKAGE = "arules") 2: eclat(Adult, parameter = list(support = 0.01, tidLists = TRUE)) It also crashes on a virtual x86_32 Windows XP Home SP3 running on the same linux machine ... Does anyone know how to fix the problem and how? Thanks and regards, Dirk > Hello, > > I'm using the eclat function of the arules package (1.0-6) for the > identification of frequent itemsets. I need the tidLists, but if I set > in the function tidLists=TRUE R crashes (Windows XP Professional SP3, > 32 bit, R version 2.12.1 (2010-12-16), reproducible on two different > computers) with two different error messages or non at all. Minimum > examples are: > > library(arules) > data("Adult") > > eclat(Adult, parameter=list(support=0.05, tidLists=FALSE)) # OK > eclat(Adult, parameter=list(support=0.50, tidLists=TRUE)) # OK > eclat(Adult, parameter=list(support=0.05, tidLists=TRUE)) # crashes > > I started to search the cause of the problem and figured out that the > problem must be located in the external function reclat called in > eclat.R using the source of the arules package: > > result <- .Call("reclat", > ## transactions > items@p, > items@i, > items@Dim, > ## parameter > parameter, control, > data@itemInfo, > PACKAGE = "arules") > > Then I looked into the source code of reclat.c, trying to follow the > tidList=TRUE parameter, but I have no C programming experience. It > looks to me that the problem may be in the item set report function > "_report_R" where memory is allocated and or released (see code > fragments below). > > My question are: > > a) Does anyone else can confirm the problem? > > b) Does anyone know, if this may be a problem of the binary package > (e.g. how it was compiled) or if it is a problem of the source code > for reclat? > > c) Does anyone know how to fix the problem and how? > > Thanks and regards, > > Dirk > > > /*---------------------------------------------------------------------- > Item Set Report Function > ----------------------------------------------------------------------*/ > > static void _report_R (int *ids, int cnt, int supp, int *tal, void *data) > { > (...) > > if (flags & OF_LIST) { > vec1 = (int*)realloc(ruleset->trnb, size1 > *sizeof(int)); > if (!vec1) { > if (vec) free(vec); > if (vec2) free(vec2); > _cleanup(); error(msg(E_NOMEM));} > ruleset->trnb = vec1; > } > (...) > if (flags & OF_LIST) { /* if to list the transactions, */ > h = ruleset->trtotal; > if (supp < 0) { /* if bit vector representation */ > for (i = 0; i < tacnt; i++) { /* traverse the bit vector */ > if (h >= size2) { > size2 += (size2 > BLKSIZE) ? (size2 >> 1) : > BLKSIZE; > vec1 = (int*)realloc(ruleset->trans, size2 > *sizeof(int)); > if (!vec1) { > if (vec) free(vec); > if (vec2) free(vec2); > _cleanup(); error(msg(E_NOMEM));} > ruleset->trans = vec1; > } > if (tal[i >> BM_SHIFT] & (1 << (i & BM_MASK))) { > /*Rprintf(" %d", i+1);*/ > ruleset->trans[h] = i; > h++; > } > } > } /* print the indices of set bits */ > else { /* if list of transaction ids */ > if ((h + supp) >= size2) { > while ((h + supp) >= size2) { > size2 += (size2 > BLKSIZE) ? (size2 >> 1) : > BLKSIZE; > } > vec1 = (int*)realloc(ruleset->trans, size2 > *sizeof(int)); > if (!vec1) { > if (vec) free(vec); > if (vec2) free(vec2); > _cleanup(); error(msg(E_NOMEM));} > ruleset->trans = vec1; > } > for (i = 0; i < supp; i++) { > /*Rprintf(" %d", tal[i]); */ > ruleset->trans[h] = tal[i]; > h++; > } /* traverse and print */ > } > ruleset->trtotal = ruleset->trnb[ruleset->rnb] = h; > } /* the transaction identifiers */ > (...) ______________________________________________ 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.