Re: [R] problem adding columns to matrix

2009-08-09 Thread Daniel Nordlund
> -Original Message-
> From: r-help-boun...@r-project.org 
> [mailto:r-help-boun...@r-project.org] On Behalf Of Fabio Murtas
> Sent: Sunday, August 09, 2009 1:51 PM
> To: R-help@r-project.org
> Subject: [R] problem adding columns to matrix
> 
> Hi all, i purchased a copy of the book Morphometrics with R 
> by Springer.
> at the end of each chapter there are exercises to train what 
> you just  
> read and (hope) learned...
> 
> so i have this problem:
> 
> Define a hypothetical data frame containing five measurments 
> normally  
> distributed(size,head,pectoral,area,weight) for four individuals  
> (named ind1, ind2, etc). ADD A COLUMN corresponding to the 
> factor sex  
> with individual 1 & 2 being Males and 3 & $ being Females.
> 
> 
> 
> HERE IS HOW I PROCEDED, getting 2 problems
> 1) what are those warning messages i got when i generate the 
> m matrix  
> (the italian text stand for "the numerical expression has 5 
> elements:  
> just the first is used")
> 2) why when i use cbind to add the s factor wit M,M,F,F,   
> (sexes) to  
> the m matrix i get numerical values 1 & 2 instead of 
> character values  
> M & F?
> 
> --
> 
> procedure follows:
> 
>  > a<- rnorm(5, 20, 7)
>  > a
> [1] 27.32586 34.07330 21.11710 25.85710 22.68296
>  > a
> [1] 27.32586 34.07330 21.11710 25.85710 22.68296
>  > b<- rnorm(5, 20, 7)
>  >
>  > d<- rnorm(5, 20, 7)
>  >
>  >
>  > e<- rnorm(5, 20, 7)
> 
>  > m<-matrix(a:e, 4,5)
> Warning messages:
> 1: In a:e :
>   l'espressione numerica ha 5 elementi: solo il primo è utilizzato
> 2: In a:e :
>   l'espressione numerica ha 5 elementi: solo il primo è utilizzato
> 3: In matrix(a:e, 4, 5) :
>   data length [3] is not a sub-multiple or multiple of the number of  
> rows [4]
>  >
>  > m
>  [,1] [,2] [,3] [,4] [,5]
> [1,] 27.32586 28.32586 29.32586 27.32586 28.32586
> [2,] 28.32586 29.32586 27.32586 28.32586 29.32586
> [3,] 29.32586 27.32586 28.32586 29.32586 27.32586
> [4,] 27.32586 28.32586 29.32586 27.32586 28.32586
> 
>  > m<-as.data.frame(m)
>  > m
> V1   V2   V3   V4   V5
> 1 27.32586 28.32586 29.32586 27.32586 28.32586
> 2 28.32586 29.32586 27.32586 28.32586 29.32586
> 3 29.32586 27.32586 28.32586 29.32586 27.32586
> 4 27.32586 28.32586 29.32586 27.32586 28.32586
>  > mode(m)
> [1] "list"
>  > colnames(m)<-c("size","head","pectoral","area","weight")
>  > mode(m)
> [1] "list"
>  >
>  > m
>   size head pectoral area   weight
> 1 27.32586 28.32586 29.32586 27.32586 28.32586
> 2 28.32586 29.32586 27.32586 28.32586 29.32586
> 3 29.32586 27.32586 28.32586 29.32586 27.32586
> 4 27.32586 28.32586 29.32586 27.32586 28.32586
> 
>  >rownames(m)<-paste("ind", 1:4, sep="")
>  >
>  >
>  > m
>  size head pectoral area   weight
> ind1 27.32586 28.32586 29.32586 27.32586 28.32586
> ind2 28.32586 29.32586 27.32586 28.32586 29.32586
> ind3 29.32586 27.32586 28.32586 29.32586 27.32586
> ind4 27.32586 28.32586 29.32586 27.32586 28.32586
> 
>  > s<-factor(c("m","m","f","f"))
>  >
>  >
>  > s
> [1] m m f f
> Levels: f m
>  > cbind(m,s)
>  size head pectoral area   weight s
> ind1 27.32586 28.32586 29.32586 27.32586 28.32586 2
> ind2 28.32586 29.32586 27.32586 28.32586 29.32586 2
> ind3 29.32586 27.32586 28.32586 29.32586 27.32586 1
> ind4 27.32586 28.32586 29.32586 27.32586 28.32586 1
>  >
> --
> 
> 
> Thanks in advance
> 

Fabio,

For question 1, the warning message is telling you that 

m<-matrix(a:e, 4,5)

Is not doing what you think it is.  The syntax a:e creates a sequence, but
it is expecting a to be a single number, not a vector.  So, it is telling
you that it is only going to use the first value from  vector a.  Likewise,
it will only use the first value of vector e for the end value.  So
effectively, you statement gets interpreted as

m<-matrix(a[1]:e[1], 4,5)  

Based on the random numbers you generated this created a sequence of
length=3.  You matrix was then created using just those 3 numbers (the first
3 numbers in the first column of your matrix) and recycled them as needed to
fill out the matrix.

You probably should have create the data frame directly, somet

[R] problem adding columns to matrix

2009-08-09 Thread Fabio Murtas

Hi all, i purchased a copy of the book Morphometrics with R by Springer.
at the end of each chapter there are exercises to train what you just  
read and (hope) learned...


so i have this problem:

Define a hypothetical data frame containing five measurments normally  
distributed(size,head,pectoral,area,weight) for four individuals  
(named ind1, ind2, etc). ADD A COLUMN corresponding to the factor sex  
with individual 1 & 2 being Males and 3 & $ being Females.




HERE IS HOW I PROCEDED, getting 2 problems
1) what are those warning messages i got when i generate the m matrix  
(the italian text stand for "the numerical expression has 5 elements:  
just the first is used")
2) why when i use cbind to add the s factor wit M,M,F,F,   (sexes) to  
the m matrix i get numerical values 1 & 2 instead of character values  
M & F?


--
procedure follows:

> a<- rnorm(5, 20, 7)
> a
[1] 27.32586 34.07330 21.11710 25.85710 22.68296
> a
[1] 27.32586 34.07330 21.11710 25.85710 22.68296
> b<- rnorm(5, 20, 7)
>
> d<- rnorm(5, 20, 7)
>
>
> e<- rnorm(5, 20, 7)

> m<-matrix(a:e, 4,5)
Warning messages:
1: In a:e :
 l'espressione numerica ha 5 elementi: solo il primo è utilizzato
2: In a:e :
 l'espressione numerica ha 5 elementi: solo il primo è utilizzato
3: In matrix(a:e, 4, 5) :
 data length [3] is not a sub-multiple or multiple of the number of  
rows [4]

>
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 27.32586 28.32586 29.32586 27.32586 28.32586
[2,] 28.32586 29.32586 27.32586 28.32586 29.32586
[3,] 29.32586 27.32586 28.32586 29.32586 27.32586
[4,] 27.32586 28.32586 29.32586 27.32586 28.32586

> m<-as.data.frame(m)
> m
   V1   V2   V3   V4   V5
1 27.32586 28.32586 29.32586 27.32586 28.32586
2 28.32586 29.32586 27.32586 28.32586 29.32586
3 29.32586 27.32586 28.32586 29.32586 27.32586
4 27.32586 28.32586 29.32586 27.32586 28.32586
> mode(m)
[1] "list"
> colnames(m)<-c("size","head","pectoral","area","weight")
> mode(m)
[1] "list"
>
> m
 size head pectoral area   weight
1 27.32586 28.32586 29.32586 27.32586 28.32586
2 28.32586 29.32586 27.32586 28.32586 29.32586
3 29.32586 27.32586 28.32586 29.32586 27.32586
4 27.32586 28.32586 29.32586 27.32586 28.32586

>rownames(m)<-paste("ind", 1:4, sep="")
>
>
> m
size head pectoral area   weight
ind1 27.32586 28.32586 29.32586 27.32586 28.32586
ind2 28.32586 29.32586 27.32586 28.32586 29.32586
ind3 29.32586 27.32586 28.32586 29.32586 27.32586
ind4 27.32586 28.32586 29.32586 27.32586 28.32586

> s<-factor(c("m","m","f","f"))
>
>
> s
[1] m m f f
Levels: f m
> cbind(m,s)
size head pectoral area   weight s
ind1 27.32586 28.32586 29.32586 27.32586 28.32586 2
ind2 28.32586 29.32586 27.32586 28.32586 29.32586 2
ind3 29.32586 27.32586 28.32586 29.32586 27.32586 1
ind4 27.32586 28.32586 29.32586 27.32586 28.32586 1
>
--

Thanks in advance


Fabio Murtas
fabio.mur...@gmail.com

Nothing in biology make sense if not in Evolution light

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