From: Spencer Graves <spencer.graves_at_pdf.com>

Date: Mon 29 May 2006 - 09:21:53 EST

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon May 29 09:26:25 2006

Date: Mon 29 May 2006 - 09:21:53 EST

I'm not sure I understand your question, but are you asking how to index choose(k, r) objects? Almost 3 years ago, I asked a question like this. Andy Liaw referred me to nchoosek(vsn) (http://finzi.psych.upenn.edu/R/Rhelp02a/archive/12518.html). This produces a matrix of dimension (r, choose(k, r)). With this matrix, you could convert an integer between 1 and choose(k, r) into an r-vector by table look-up. Reading the code for nchoosek might help you further if this does not seem appropriate for you.

I found this just now using 'RSiteSearch("all subsets of a size")', which produced 102 hits. Another one that looked like it might help you is "http://finzi.psych.upenn.edu/R/Rhelp02a/archive/1717.html".

Hope this helps, Spencer Graves

Kjetil Brinchmann Halvorsen wrote:

> Hola!

*>
**> I am programming a class (S3) "symarray" for
**> storing the results of functions symmetric in its
**> k arguments. Intended use is for association indices
**> for more than two variables, for instance coresistivity
**> against antibiotics.
**>
**> There is one programming problem I haven't solved, making an inverse
**> of the index function indx() --- se code below. It could for instance
**> return the original k indexes in strictly increasing order, to make
**> indx() formally invertible.
**>
**> Any ideas?
**>
**> Kjetil
**>
**>
**> Code:
**>
**>
**> # Implementing an S3 class for symarrays with array rank r for dimension
**> # [k, k, ..., k] with k>=r repeated r times. We do not store the diagonal.
**>
**> # Storage requirement is given by {r, k}= choose(k, r)
**> # where r=array rank, k=maximum index
**>
**> symarray <- function(data=NA, dims=c(1,1)){
**> r <- dims[1]
**> k <- dims[2]
**> if(r > k) stop("symarray needs dimension larger than array rank")
**> len <- choose(k, r)
**> out <- data[1:len]
**> attr(out, "dims") <- dims
**> class(out) <- "symarray"
**> out
**> }
**>
**> # Index calculation:
**>
**> indx <- function(inds, k){
**> r <- length(inds)
**> if(r==1) return(inds) else {
**> if(inds[1]==1) {
**> return( indx(inds[-1]-1, k-1 ) ) } else {
**> return( indx(c(inds[1]-1, seq(from=k-r+2, by=1, to=k)), k) +
**> indx( inds[-1]-inds[1], k-inds[1] ))
**> }
**> }
**> } # end indx
**>
**> # Methods for assignment and indexing:
**>
**> "[.symarray" <- function(x, inds, drop=FALSE){
**> dims <- attr(x, "dims")
**> k <- dims[2]
**> inds <- indx(inds, k)
**> res <- NextMethod("[", x)
**> res
**> }
**>
**> "[<-.symarray" <- function(x, inds, value){
**> dims <- attr(x, "dims")
**> k <- dims[2]
**> inds <- indx(inds, k)
**> res <- NextMethod("[<-", x)
**> res
**> }
**>
**> ______________________________________________
**> R-help@stat.math.ethz.ch mailing list
**> https://stat.ethz.ch/mailman/listinfo/r-help
**> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
*

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon May 29 09:26:25 2006

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.1.8, at Mon 29 May 2006 - 20:10:19 EST.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*