[R] An Apply function question about changing type of variable

Ben Tupper btupper at bigelow.org
Fri Sep 27 19:42:59 CEST 2013


Hi,

On Sep 27, 2013, at 11:27 AM, Vincent Guyader wrote:

> Hi everyone,
> 
> plese can you look at this few lines :
> 
> data(iris)
> res<-apply(iris,MARGIN=2,is)
> res[1,]
> 
> the result is :
> Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species
> "character"  "character"  "character"  "character"  "character"
> 
> How can I conserve the type off each colum? apply seems to convert it into
> "character" adn it could be a problem for me.
> 

Did you intend to use lapply() instead of apply()?  

> res<-lapply(iris,is)
> str(res)
List of 5
 $ Sepal.Length: chr [1:2] "numeric" "vector"
 $ Sepal.Width : chr [1:2] "numeric" "vector"
 $ Petal.Length: chr [1:2] "numeric" "vector"
 $ Petal.Width : chr [1:2] "numeric" "vector"
 $ Species     : chr [1:5] "factor" "integer" "oldClass" "numeric" ...

apply() expects an array input, so it will coerce non-array inputs to be so with as.matrix() or as.array(). That coercion will change the data type if needed, in your case changing all to character to accommodate the factor column.

> iris2 <- as.matrix(iris)
> str(iris2)
 chr [1:150, 1:5] "5.1" "4.9" "4.7" "4.6" "5.0" "5.4" "4.6" "5.0" "4.4" ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:5] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" ...

Cheers,
Ben



> 
> Regards
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at 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.

Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org



More information about the R-help mailing list