Thanks, A.K. I managed to create diagonal matrices for character vectors. Since this new behavior broke a package that I have written, I would like to make sure that this new behavior was not introduced by mistakes. If this new behavior is final, I will modify my code to fit it.
Mike On Tue, Apr 9, 2013 at 10:14 PM, arun <smartpink...@yahoo.com> wrote: > Hi, > You could try this: > v <- c("a", "b") > mat1<-diag(length(v)) > diag(mat1)<- v > mat1 > # [,1] [,2] > #[1,] "a" "0" > #[2,] "0" "b" > > > v1<- letters[1:5] > mat2<- diag(length(v1)) > diag(mat2)<- v1 > mat2 > # [,1] [,2] [,3] [,4] [,5] > #[1,] "a" "0" "0" "0" "0" > #[2,] "0" "b" "0" "0" "0" > #[3,] "0" "0" "c" "0" "0" > #[4,] "0" "0" "0" "d" "0" > #[5,] "0" "0" "0" "0" "e" > A.K. > > > > > ----- Original Message ----- > From: Mike Cheung <mikewlche...@gmail.com> > To: r-help <r-help@r-project.org> > Cc: > Sent: Tuesday, April 9, 2013 3:15 AM > Subject: [R] Behaviors of diag() with character vector in R 3.0.0 > > Dear all, > > According to CHANGES IN R 3.0.0: > o diag() as used to generate a diagonal matrix has been re-written > in C for speed and less memory usage. It now forces the result > to be numeric in the case diag(x) since it is said to have 'zero > off-diagonal entries'. > > diag(x) does not work for character vector in R 3.0.0 any more. For > example, > v <- c("a", "b") > > ## R 2.15.3 > diag(v) > [,1] [,2] > [1,] "a" "0" > [2,] "0" "b" > > ## R 3.0.0 > diag(v) > [,1] [,2] > [1,] NA 0 > [2,] 0 NA > Warning message: > In diag(v) : NAs introduced by coercion > > Regarding the character matrix, it still works. For example, > m <- matrix(c("a", "b", "c", "d"), nrow=2) > diag(m) > ## Both R 2.15.3 and 3.0.0 > [1] "a" "d" > > n <- matrix(0, ncol=2, nrow=2) > diag(n) <- v > n > ## Both R 2.15.3 and 3.0.0 > [,1] [,2] > [1,] "a" "0" > [2,] "0" "b" > > I understand that the above behavior follows exactly what the manual says. > It appears to me that the version in 2.15.3 is more general as it works for > both numeric and character vectors and matrices, whereas the version in > 3.0.0 works for character matrices but not character vectors. > > Would it be possible to retain the behaviors of diag() for character > vectors? Thanks. > > Mike > -- > --------------------------------------------------------------------- > Mike W.L. Cheung Phone: (65) 6516-3702 > Department of Psychology Fax: (65) 6773-1843 > National University of Singapore > http://courses.nus.edu.sg/course/psycwlm/internet/ > --------------------------------------------------------------------- > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. > > -- --------------------------------------------------------------------- Mike W.L. Cheung Phone: (65) 6516-3702 Department of Psychology Fax: (65) 6773-1843 National University of Singapore http://courses.nus.edu.sg/course/psycwlm/internet/ --------------------------------------------------------------------- [[alternative HTML version deleted]] ______________________________________________ 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.