[R] transposing/rotating XY in a 3D array

2009-05-15 Thread andzsin
Dear list,

We have a number of files containing similarly structured data:
file1:
A B C
1 2 3
4 5 6

file2:
A B C
7 8 9
10 11 12
... etc


My part of R receives all these data as an array: 1,2,3... 12 together
with info about dimensions (row,col,fileN) . (

Converting the data into 3D cannot simply done by:
   array(x, c(2,3,2))
because breaks the structure (e.g. 1,3,5 is type mismatch)

array(1:12,c(2,3,2))
, , 1

 [,1] [,2] [,3]
[1,]135
[2,]246
...

Of course  following R's indexing order (rowIndex is the fastest)
retains the structures, but X and Y dimensions are transposed. (note, c
(2,3,2) = (3,2,2))

array(1:12, c(3,2,2))
, , 1

 [,1] [,2]
[1,]14
[2,]25
[3,]36

Its like converting into Japanese vertical reading.
It is not that I cannot get used to it, but I guess it is less error
prone if I have the same order as in the data files.

Now I am using an ad-hoc function (see below) to transpose back the
rotated YX into a  XYZ array, but I'd rather go with built-ins, e.g.
byrow=T, or t()  -- and also without duplicating my data.
THanks for the advice in advance.

Gabor

code
transposeXYinXYZ-function(x){
y - array(NA,c(dim(x)[2],dim(x)[1],dim(x)[3]))

for(i in 1:dim(x)[3]){
y[,,i] - t(x[,,i])
}
return (y)
}
xyz - array(1:24,c(4,3,2))
yxz - transpose(x)

xyz
yxz
/code

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


Re: [R] transposing/rotating XY in a 3D array

2009-05-15 Thread Kushantha Perera

Try this:

 x  - array(1:12,c(3,2,2))
 x
, , 1

 [,1] [,2]
[1,]14
[2,]25
[3,]36

, , 2

 [,1] [,2]
[1,]7   10
[2,]8   11
[3,]9   12

 xt - aperm(x, c(2,1,3))
 xt
, , 1

 [,1] [,2] [,3]
[1,]123
[2,]456

, , 2

 [,1] [,2] [,3]
[1,]789
[2,]   10   11   12

Good day!

Kushantha Perera | Amba Research

Ph +94 11 235 6281 | Mob +94 77 222 4373

Bangalore * Colombo * London * New York * San José * Singapore * 
www.ambaresearch.com

-Original Message-
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
Behalf Of andzsin
Sent: Friday, May 15, 2009 12:38 PM
To: r-help@r-project.org
Subject: [R] transposing/rotating XY in a 3D array

Dear list,

We have a number of files containing similarly structured data:
file1:
A B C
1 2 3
4 5 6

file2:
A B C
7 8 9
10 11 12
... etc


My part of R receives all these data as an array: 1,2,3... 12 together
with info about dimensions (row,col,fileN) . (

Converting the data into 3D cannot simply done by:
   array(x, c(2,3,2))
because breaks the structure (e.g. 1,3,5 is type mismatch)

array(1:12,c(2,3,2))
, , 1

 [,1] [,2] [,3]
[1,]135
[2,]246
...

Of course  following R's indexing order (rowIndex is the fastest)
retains the structures, but X and Y dimensions are transposed. (note, c
(2,3,2) = (3,2,2))

array(1:12, c(3,2,2))
, , 1

 [,1] [,2]
[1,]14
[2,]25
[3,]36

Its like converting into Japanese vertical reading.
It is not that I cannot get used to it, but I guess it is less error
prone if I have the same order as in the data files.

Now I am using an ad-hoc function (see below) to transpose back the
rotated YX into a  XYZ array, but I'd rather go with built-ins, e.g.
byrow=T, or t()  -- and also without duplicating my data.
THanks for the advice in advance.

Gabor

code
transposeXYinXYZ-function(x){
y - array(NA,c(dim(x)[2],dim(x)[1],dim(x)[3]))

for(i in 1:dim(x)[3]){
y[,,i] - t(x[,,i])
}
return (y)
}xyz - array(1:24,c(4,3,2))
yxz - transpose(x)

xyz
yxz
/code

__
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.
This e-mail may contain confidential and/or privileged i...{{dropped:10}}

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


Re: [R] transposing/rotating XY in a 3D array

2009-05-15 Thread andzsin
Dear Kushantha,

Thank you very much.
Very nice, indeed.


Gabor

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