I have a basic for loop with a simple matrix. The code is doing what it is supposed to do, but I'm still wondering the error "subscript out of bounds". What would be a smoother way to code such a basic for loop? myMatrix <- matrix(0,5,12) for(i in 1:nrow(myMatrix)) { for(i in 1:ncol(myMatrix)) { myMatrix[i,i] = -1 myMatrix[i,i+1] = 1 }} print(myMatrix) Thanks in advance! [[alternative HTML version deleted]]
Both loops are on 'i', which is a bad idea. :-) Also myMatrix[i,i+1] will be out-of-bounds if i = ncol(myMatrix) On Mon, Aug 6, 2018 at 12:02 PM, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> wrote:> I have a basic for loop with a simple matrix. The code is doing what it is > supposed to do, but I'm still wondering the error "subscript out of > bounds". What would be a smoother way to code such a basic for loop? > > myMatrix <- matrix(0,5,12) > for(i in 1:nrow(myMatrix)) { > for(i in 1:ncol(myMatrix)) { > myMatrix[i,i] = -1 > myMatrix[i,i+1] = 1 > }} > print(myMatrix) > > Thanks in advance! > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >[[alternative HTML version deleted]]
Hello, Eric is right but... You have two assignments. The second sets a value that will be overwritten is the next iteration by myMatrix[i,i] = -1 when 'i' becomes the next value. If you fix the second index and use 'j', you might as well do myMatrix[] = -1 myMatrix[, ncol(myMatrix)] = 1 Hope this helps, Rui Barradas ?s 10:24 de 06/08/2018, Eric Berger escreveu:> Both loops are on 'i', which is a bad idea. :-) > Also myMatrix[i,i+1] will be out-of-bounds if i = ncol(myMatrix) > > > On Mon, Aug 6, 2018 at 12:02 PM, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> > wrote: > >> I have a basic for loop with a simple matrix. The code is doing what it is >> supposed to do, but I'm still wondering the error "subscript out of >> bounds". What would be a smoother way to code such a basic for loop? >> >> myMatrix <- matrix(0,5,12) >> for(i in 1:nrow(myMatrix)) { >> for(i in 1:ncol(myMatrix)) { >> myMatrix[i,i] = -1 >> myMatrix[i,i+1] = 1 >> }} >> print(myMatrix) >> >> Thanks in advance! >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. >> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >
Quoting Maija Sirkj?rvi <maija.sirkjarvi at gmail.com>:> I have a basic for loop with a simple matrix. The code is doing what it is > supposed to do, but I'm still wondering the error "subscript out of > bounds". What would be a smoother way to code such a basic for loop? > > myMatrix <- matrix(0,5,12) > for(i in 1:nrow(myMatrix)) { > for(i in 1:ncol(myMatrix)) { > myMatrix[i,i] = -1 > myMatrix[i,i+1] = 1 > }} > print(myMatrix) > > Thanks in advance! >Perhaps you do not need loops at all? myMatrix <- matrix(0, 5, 12) diag(myMatrix) <- -1 diag(myMatrix[, -1]) <- 1 -- Enrico Schumann Lucerne, Switzerland http://enricoschumann.net