[R] A matrix problem

David Winsemius dwinsemius at comcast.net
Wed Sep 16 15:53:41 CEST 2009


On Sep 16, 2009, at 9:40 AM, Bogaso wrote:

>
> Hi all,
>
> I have following ch. matrix :
>
>> mat
>     [,1]                [,2]                  [,3]                [,4]
> [1,] "NA"                "0.0671746073115122"  "1.15281464953731"
> "0.822277316923348"
> [2,] "0.113184828073156" "-0.0133150789005112" "0.640912657072027"
> "-0.0667317787225847"
> [3,] "-1.40593584523871" "1.10755549414758"    "0.493828059815449"
> "-1.09233516877992"
> [4,] "0.577643850085066" "1.10279525071026"    "1.16725625310315"
> "0.367724768195794"
> [5,] "0.746100264271392" "-0.335556133578362"  "NA"
> "0.328559028366446"
>
> Now I want to convert it to a numeric matrix. So I used following  
> code :
>
>> as.numeric(mat)
> [1]          NA  0.11318483 -1.40593585  0.57764385  0.74610026   
> 0.06717461
> -0.01331508  1.10755549  1.10279525 -0.33555613
> [11]  1.15281465  0.64091266  0.49382806  1.16725625          NA   
> 0.82227732
> -0.06673178 -1.09233517  0.36772477  0.32855903
> Warning message:
> NAs introduced by coercion
>
> What I noticed is that :
> 1. Original matrix converted to vector

I'm not sure if this is a recommended method but it is compact:

 > M <- matrix(as.character(c(NA,NA, rnorm(14))), ncol=4)
 > M
      [,1]                [,2]                 [,3]                 [,4]
[1,] "NA"                "-0.601520920256251" "-1.00727470025995"   
"-0.510937067339167"
[2,] NA                  "-0.643289410284616" "-0.560094940433377"  
"1.65539295869595"
[3,] "-1.58527121117001" "-0.303929580683863" "0.656380566243141"   
"0.863929178838393"
[4,] "0.466350502132621" "1.85702073433996"   "0.349130873645143"   
"-0.821650081436582"

I put in both a "real" NA and a character NA just to be sure.

 > mode(M) <- "numeric"
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion
 > M
         [,1]    [,2]    [,3]    [,4]
[1,]      NA -0.6015 -1.0073 -0.5109
[2,]      NA -0.6433 -0.5601  1.6554
[3,] -1.5853 -0.3039  0.6564  0.8639
[4,]  0.4664  1.8570  0.3491 -0.8217

> 2. A waring message is there.

You can suppress warnings:

options(warn = -1)  # and then restore the warning level to the  
default of 0
>
> I do not want such things to happen. Is there any direct way to  
> convert my
> original ch. matrix to a numeric matrix ?
> Thanks
> -- 


David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list