# [R] Importing and exporting threedimensional arrays

Bert Gunter bgunter.4567 at gmail.com
Fri Nov 11 17:30:32 CET 2016

```Ferri:

I am not sure that I adequately understand your question, but I'll
give it a shot.

1) Do a Web Search on "long form data"; in particular, the following
seemed to be most helpful, but you may prefer one of the other hits:

http://stanford.edu/~ejdemyr/r-tutorials/wide-and-long/

2) See ?reshape  in R for R's take on this.

3) If this is not helpful, note that any 3d array can be
conceptualized as a list of 2d matrices, and this immediately gives an
algorithm to convert a 3-d array to a 2-d matrix which can then be
outputted as an ascii table via write.table() . e.g.

> a <- array(1:24,dim=2:4)
> a
, , 1

[,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

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

, , 3

[,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

[,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

> b <-do.call(rbind,lapply(1:4,function(i)I(a[,,i])))
> b
[,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
[3,]    7    9   11
[4,]    8   10   12
[5,]   13   15   17
[6,]   14   16   18
[7,]   19   21   23
[8,]   20   22   24

Note, however, that this is quite inefficient, and a much faster way
to do this would be to take advantage of the column major order in
which arrays are stored; i.e. an array is actually a vector with a
"dim" attribute. However, I'm too lazy to fool with that now .

But if I understand correctly, your probably better off using long
form data in R to process your data as a (tabular) data frame and

HTH

Cheers,
Bert

Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )

On Fri, Nov 11, 2016 at 4:36 AM, Ferri Leberl <ferri.leberl at gmx.at> wrote:
>
>
>
> I'm afraid it doesn't.
>
> The planned workflow should be:
>
> Somebody delivers me a table containing the essential relations of an XML-schema in form of a list that should, once it is functional, be generated out of R. So I need a form that is as universal as possible — therefore I thought of a tabular separated list.
> If I make an array:
>
> feld<-array(1:60,dim=c(4,3,5))
>
> save it
>
> save(file="feld",list="feld")
>
> and read it in the bash
>
> cat feld
>
>
> U�G�@
>      @Q��z���,9�  !��w�?,��3c[�/g�2mSD4ѡ鄆��C��r�>�#�'�]劸���?P5�a��(b�#�\$RH#�,rȣ�"J(��*j���&Zh��.z�c�!F▒c�)f�c
>                     K���[����ϼ�Н��;�o|�����Y��N
>
> So I guess it will be a science of its own to understand, how the file is structured.
>
> So I need either a format that allows to easily parse the import 3D-Matrix outside R, or I need any good idea how to avoid the third dimension (e.g., might it function to use a second separation character within the collumns which may contain several items?
>
> Thank you in advance!
> Have a pleasant weekend.
> Yours, Ferri
>
>
>
>
>
> Gesendet: Freitag, 11. November 2016 um 12:02 Uhr
> Von: "Rui Barradas" <ruipbarradas at sapo.pt>
> An: "Ferri Leberl" <ferri.leberl at gmx.at>, "r-helpr-project.org" <r-help at r-project.org>
> Betreff: Re: [R] Importing and exporting threedimensional arrays
> Hello,
>
> You can save 3D objects (or objects of any form or shape) by using ?save.
> You would then retrieve them with ?load.
>
> Hope this helps,
>
>
> Em 11-11-2016 09:36, Ferri Leberl escreveu:
>>
>> Dear all,
>>
>> I want to process a list of XML-Elements.
>> In one dimension the elements are listed; in the other their respective properties (name, comment, parent, children, attributes).
>>
>> I am writing a script that processes such tables, and another one that produces sample tables to test the first script.
>> So the first script should import tabular-separated lists, and the second should export them with write.table (or anything better you suggest me).
>>
>> As long as we stay two dimensional I see no difficulties.
>>
>> However, there can be several children and several attributes. So my idea was to add a third dimension — but some tests I did showed me that e.g.
>>
>> write.table(array(1:60,dim=c(4,3,5)),"beispielmatrix",sep="\t",quote=FALSE,row.names=F,col.names=F,dec=",")
>>
>> produces a 2D-tsv.
>>
>> So, how can I handle the fact, that there may be several items in a children resp. atrribute field?
>>
>> Thank you in advance!
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
>>
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

```