From pburns at pburns.seanet.com  Wed Nov 23 13:06:24 2005
From: pburns at pburns.seanet.com (Patrick Burns)
Date: Wed, 23 Nov 2005 12:06:24 +0000
Subject: [Rd] x[1,], x[1,,], x[1,,,], ...
In-Reply-To: <4384498B.1080401@maths.lth.se>
References: <4384498B.1080401@maths.lth.se>
Message-ID: <43845B40.9020000@pburns.seanet.com>

You can look at the definition of 'corner' in the public
domain area of the Burns Statistics website.  It uses
'do.call' on '[' to achieve (sort of) what you want.

Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")

Henrik Bengtsson wrote:

>Hi,
>
>is there a function in R already doing what I try to do below:
>
># Let 'x' be an array with *any* number of dimensions (>=1).
>x <- array(1:24, dim=c(2,2,3,2))
>...
>x <- array(1:24, dim=c(4,3,2))
>
>i <- 2:3
>
>ndim <- length(dim(x))
>if (ndim == 1)
>   y <- x[i]
>else if (ndim == 2)
>   y <- x[i,]
>else if (ndim == 3)
>   y <- x[i,,]
>else ...
>
>and so on.  My current solution is
>
>ndim <- length(dim(x))
>args <- rep(",", ndim)
>args[1] <- "i"
>args <- paste(args, collapse="")
>code <- paste("x[", args, "]", sep="")
>expr <- parse(text=code)
>y <- eval(expr)
>
>ndim <- length(dim(x))
>args <- rep(",", ndim)
>args[1] <- "i"
>args <- paste(args, collapse="")
>code <- paste("x[", args, "]", sep="")
>expr <- parse(text=code)
>y <- eval(expr)
>
>Is there another way I can do this in R that I have overlooked?
>
>/Henrik
>
>______________________________________________
>R-devel at r-project.org mailing list
>https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>
>  
>



[Rd] x[1,], x[1,,], x[1,,,], ...
Patrick Burns