# Re: [R] reading long matrix

From: jim holtman <jholtman_at_gmail.com>
Date: Fri 23 Dec 2005 - 06:07:54 EST

Here is a way of reading the data into a 'list'. You can convert the list to any array of the proper dimensions.

> input <- scan('/tempxx.txt.r', what='')
> input

``` [1] "SPECIES1"  "999001099" "900110109" "011101000" "901100101" "110100019"
[7] "901110019" "SPECIES2"  "999000099" "900110119" "011101100" "901010101"
[13] "110000019" "900000019" "SPECIES3"  "999001099" "900100109" "011100010"
[19] "901100100" "110100019" "901110019"
```

> # find the names
> breaks <- grep("[[:alpha:]][[:alnum:]]+", input)
> # determine the sizes
> map <- cbind(breaks, diff(c(breaks, length(input)+1)))
> out <- list()
> # repeat for each data block
> for (i in 1:nrow(map)){
```+     .set <- NULL
+     for (j in 1:(map[i, 2] - 1)){
+         .set <- rbind(.set, strsplit(input[map[i, 1] + j], '')[[1]])
+     }
+     out[[input[map[i, 1]]]] <- .set
+ }
```

> out

\$SPECIES1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
```[1,] "9"  "9"  "9"  "0"  "0"  "1"  "0"  "9"  "9"
[2,] "9"  "0"  "0"  "1"  "1"  "0"  "1"  "0"  "9"
[3,] "0"  "1"  "1"  "1"  "0"  "1"  "0"  "0"  "0"
[4,] "9"  "0"  "1"  "1"  "0"  "0"  "1"  "0"  "1"
[5,] "1"  "1"  "0"  "1"  "0"  "0"  "0"  "1"  "9"
[6,] "9"  "0"  "1"  "1"  "1"  "0"  "0"  "1"  "9"

\$SPECIES2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] "9"  "9"  "9"  "0"  "0"  "0"  "0"  "9"  "9"
[2,] "9"  "0"  "0"  "1"  "1"  "0"  "1"  "1"  "9"
[3,] "0"  "1"  "1"  "1"  "0"  "1"  "1"  "0"  "0"
[4,] "9"  "0"  "1"  "0"  "1"  "0"  "1"  "0"  "1"
```
[5,] "1" "1" "0" "0" "0" "0" "0" "1" "9" [6,] "9" "0" "0" "0" "0" "0" "0" "1" "9"

\$SPECIES3
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]

```[1,] "9"  "9"  "9"  "0"  "0"  "1"  "0"  "9"  "9"
[2,] "9"  "0"  "0"  "1"  "0"  "0"  "1"  "0"  "9"
[3,] "0"  "1"  "1"  "1"  "0"  "0"  "0"  "1"  "0"
[4,] "9"  "0"  "1"  "1"  "0"  "0"  "1"  "0"  "0"
[5,] "1"  "1"  "0"  "1"  "0"  "0"  "0"  "1"  "9"
[6,] "9"  "0"  "1"  "1"  "1"  "0"  "0"  "1"  "9"

```

>

On 12/22/05, Colin Beale <c.beale@macaulay.ac.uk> wrote:

```>
```

> Hi,
```>
```

> I'm needing some help finding a function to read a large text file into an
> array in R. The data are essentially presence / absence / na data for many
> species and come as a grid with each species name (after two spaces) at the
> beginning of the matrix defining the map for that species. An excerpt could
> therefore be:
```>
```

> SPECIES1
> 999001099
> 900110109
> 011101000
> 901100101
> 110100019
> 901110019
```>
```

> SPECIES2
> 999000099
> 900110119
> 011101100
> 901010101
> 110000019
> 900000019
```>
```

> SPECIES3
> 999001099
> 900100109
> 011100010
> 901100100
> 110100019
> 901110019
```>
```

> where 9 is actually na, 0 is absence and 1 presence. The final array I
> want to create should have dimensions that are the x and y coordinates and
> the number of species (known in advance). (In this example dim = c(9,6,3)).
> It would be sort of neat if the code could also read the species name into
> the appropriate names attribute, but this is a refinement that I could
> probably do if someone can help me read the data into R and into an array in
> the first place. I'm currently thinking a line by line approach using
> readLines might be the best option, but I've got a very long file - well
> over 100 species, each a matrix of 70 x 100 datapoints. making this option
> rther time consuming, I expect - especially as the next dataset has 1300
> species and a much larger grid...
```>
```

> Any hints would be gratefully recieved.
```>
```

> Colin Beale
> Macaulay Land Use Research Institute
```>

> ______________________________________________
```
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> http://www.R-project.org/posting-guide.html
>
```--
Jim Holtman
Cincinnati, OH
+1 513 247 0281

What the problem you are trying to solve?

[[alternative HTML version deleted]]

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help