Hi Eric,

Your solution looks very close to my own. I also use expand.grid to get 
the cross product though. If I find an alternate way, I will send out my 
solution.

Thanks a lot for your suggestion !

Regards,
Saravanan

On 06/15/2011 09:34 AM, Eric Lecoutre wrote:
> Ho Saravana,
> I did have nearly the same issue some months ago -- you will find 
> below a good starting point.
> I am quite sure there is a better way to achieve it or with better 
> code,  but this should work!
> Kind regards,
>
> Eric
> ---------
> generateCube <- function(x,simplify=TRUE,onlyComb=FALSE,...){
> stopifnot(require(gtools))
> xdf=as.data.frame(x)
> out=vector(length=ncol(xdf),mode="list")
> for (i in 1:ncol(xdf)){ # dimensions of the cube
>  icomb <- combinations(length(colnames(xdf)),i,colnames(xdf))
>  out[[i]] <- vector(length=nrow(icomb),mode="list")
>  for (j in 1:nrow(icomb)){
>   ijargs <- icomb[j,]
>   names(out[[i]])[j] <- paste(ijargs,collapse="*")
>   tmp <-
>    with(
>    xdf,
>    eval(parse(text=
>     paste("table(",paste(ijargs,collapse=","),")",sep="")
>     ))
>   )
>   if (simplify & i>1) tmp<-as.data.frame(ftable(tmp))
>   out[[i]][[j]] <- tmp
>   }
>  }
> return(out)
> }
> M=diag(3)
> M[1,2]=2
> M <- rbind(M,M[1,])
> colnames(M) <- paste("V",1:ncol(M),sep="")
> out=generateCube(M)
> out2=generateCube(M,simplify=FALSE)
>
> out[[2]][["V1*V3"]]
> out2[[2]][["V1*V3"]]["0","1"]
> -------------
>
>
> On 14 June 2011 14:59, Saravanan 
> <saravanan.thirumuruganat...@gmail.com 
> <mailto:saravanan.thirumuruganat...@gmail.com>> wrote:
>
>     Hello All,
>
>     I have a dataset and I wish to obtain all possible data cuboids
>     from it using R . For eg if my data frame is :
>
>     A    B    C
>     1    1    1
>     1    2    1
>     2    2    1
>
>     The output intended is :
>     A=1
>     A=2
>     B=1
>     B=2
>     C=1
>     A=1,B=1
>     A=1,B=2
>     A=2,B=2
>     A=1,C=1
>     A=2,C=1
>     B=1,C=1
>     B=2,C=1
>     A=1,B=1,C=1
>     A=1,B=2,C=1
>     A=2,B=2,C=1
>
>     Are there any function(s) to do this in R ? I tried a combination
>     of expand.grid and combn but the resulting code was very ugly and
>     needed lot of hacks to make it work. I also tried to check the
>     code for arules (which constructs similar "itemsets") but
>     unfortunately its code is in C and I am not very familiar in
>     writing R extensions. Any pointers to functions will be much
>     appreciated.
>
>     Regards,
>     Saravanan
>
>     ______________________________________________
>     R-help@r-project.org <mailto: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
>     <http://www.r-project.org/posting-guide.html>
>     and provide commented, minimal, self-contained, reproducible code.
>
>
>
>
> -- 
> Eric Lecoutre
> Consultant - Business & Decision
> Business Intelligence & Customer Intelligence

        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to