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.

Reply via email to