On 07/01/2010 9:31 AM, berga...@gmail.com wrote:
Dear all
I have the following problem.
M <- matrix(0,3,3) # dimension of M is dinamic and this can lead to the
next subscript
diag(M[1,1]) <- rep(100,1)
#Error in `diag<-`(`*tmp*`, value = 100) :
# only matrix diagonals can be replaced
diag(M[1,1,drop=F]) <- rep(100,1)
#Error in diag(M[1, 1, drop = F]) <- rep(100, 1) :
# incorrect number of subscripts
diag(M[2:3,1:2]) <- rep(100,2)
# works fine
Is there a way to usw diag as replacement function when the input matrix is
subscript to a one by one matrix. I don't want extra if(dim==1)... etc.
The problem isn't with diag, it's with "[<-". When you include drop=F,
it doesn't appear to handle properly the matrix indexing that diag() uses.
So a simpler example is just
M[1,1, drop=FALSE] <- 1
which generates the same error you saw. I'd call this a bug; I'll look
into it. ("[<-" is done internally in some fairly ugly code, so this
might take a while.)
As a workaround, I think this does what you want:
n <- 1
submatrix <- M[1:n,1:n,drop=FALSE]
diag(submatrix) <- rep(100, n)
M[1:n,1:n] <- submatrix
Duncan Murdoch
Thanks a lot in advance.
Best regards,
Roger
[[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.
______________________________________________
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.