On 02/18/2011 04:11 PM, Maas James Dr (MED) wrote:
Hi Claudia,
It does help a lot, but not quite there yet ... I'm sure you are correct and
is much appreciated, I need some sort of generalized form, actual arrays in
my case are 3x3x1000. Do you suspect it could be done in one step with
sapply?
Why sapply?
Sure you can to it in one step:
y<- aperm (apply (x, 1:2, sort), c(2, 3, 1))
I just think two lines are more readable.
Note that all these numbers are the "directions" of the array and don't have
anything to do with the actual size. Just try it out with different array sizes.
> a <- array (runif (9000), c (3, 3, 1000))
> a [,,1:2]
, , 1
[,1] [,2] [,3]
[1,] 0.8721 0.5102 0.47370
[2,] 0.7721 0.5744 0.98281
[3,] 0.9357 0.1969 0.08784
, , 2
[,1] [,2] [,3]
[1,] 0.1485 0.6878 0.1018
[2,] 0.3784 0.3864 0.9814
[3,] 0.9219 0.5664 0.4565
> y<- aperm (apply (a, 1:2, sort), c(2, 3, 1))
> y [,,1:2]
, , 1
[,1] [,2] [,3]
[1,] 1.121e-03 1.517e-03 0.0008285
[2,] 7.118e-05 3.303e-04 0.0003870
[3,] 7.445e-04 2.461e-05 0.0005980
, , 2
[,1] [,2] [,3]
[1,] 0.001375 0.0049272 0.004581
[2,] 0.002204 0.0004947 0.001148
[3,] 0.004214 0.0006355 0.001610
> y [,,999:1000]
, , 1
[,1] [,2] [,3]
[1,] 0.9989 0.9980 0.9998
[2,] 0.9982 0.9973 0.9994
[3,] 0.9994 0.9978 0.9993
, , 2
[,1] [,2] [,3]
[1,] 0.9997 0.9992 0.9999
[2,] 0.9986 0.9981 0.9997
[3,] 0.9998 0.9988 0.9996
BTW: as your MARGINS are short, only 3 x 3 = 9 calls to FUN are necessary. I
don't think you can gain much time here. The calculation with 3 x 3 x 1000 on my
computer had 3 ms elapsed, and increasing every direction by a factor of 10
still needs 1/3 s.
Claudia
Regards
J
=============================== Dr. Jim Maas Research Associate in Network
Meta-Analysis School of Medicine, Health Policy and Practice CD Annex, Room
1.04 University of East Anglia Norwich, UK NR4 7TJ
+44 (0) 1603 591412
From: Claudia Beleites [mailto:cbelei...@units.it]
Dear James,
this is what I understood your sorting along the third dimension to be:
x<- array(c(9, 9, 7, 9, 6, 5, 4, 6, 2, 1, 3, 2), dim = list(2, 2,
3))
y<- apply (x, 1:2, sort) y
, , 1
[,1] [,2] [1,] 2 1 [2,] 6 5 [3,] 9 9
, , 2
[,1] [,2] [1,] 3 2 [2,] 4 6 [3,] 7 9
The results of apply are length (result of function) x [shape of x without
the dimensions you hand to apply).
Thus, your specified result needs rearranging the dimensions:
y<- aperm (y, c(2, 3, 1)) y
, , 1
[,1] [,2] [1,] 2 3 [2,] 1 2
, , 2
[,1] [,2] [1,] 6 4 [2,] 5 6
, , 3
[,1] [,2] [1,] 9 7 [2,] 9 9
HTH Claudia
-- Claudia Beleites Dipartimento dei Materiali e delle Risorse Naturali
Università degli Studi di Trieste Via Alfonso Valerio 6/a I-34127 Trieste
phone: +39 0 40 5 58-37 68 email: cbelei...@units.it
--
Claudia Beleites
Dipartimento dei Materiali e delle Risorse Naturali
Università degli Studi di Trieste
Via Alfonso Valerio 6/a
I-34127 Trieste
phone: +39 0 40 5 58-37 68
email: cbelei...@units.it
______________________________________________
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.