I have a function that does some plotting. I then add lines to the plot. If executed one line at a time, there is not a problem. If I execute the function, though, I get: Error in ans[[1]] : subscript out of bounds This always occurs after the second lines command, and doesn't happen with all of my data points (some do not have errors). Any ideas? Thanks, Sean function(x,annot,rat1,rat2,rf,...) { par(las=2) wh <- which(annot[,5]==x) xmax <- max(annot[wh,4]) xmin <- min(annot[wh,3]) chr <- annot[wh,2][1] wh.rf <- rf$chrom==as.character(chr) & rf$txStart>xmin & rf$txEnd<xmax par(mfrow=c(2,1)) plot(annot[wh,3],rat1[wh],type="l",xlab="",ylab="log2 Ratio",main=x,...) points(annot[wh,3],rat1[wh]) apply(rf[wh.rf,],1,function(z) { browser() if (z[4]=="+") { color <- 'green' yoffset=1 } else { color <- 'red' yoffset=-1 } lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ 10)),lwd=2,col=color) lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ 10)),lwd=2,col=color) }) abline(h=0,lty=2) }
Sean Davis wrote:> I have a function that does some plotting. I then add lines to the > plot. If executed one line at a time, there is not a problem. If I > execute the function, though, I get: > > Error in ans[[1]] : subscript out of bounds > > This always occurs after the second lines command, and doesn't happen > with all of my data points (some do not have errors). Any ideas?Please give an example how to produce the error, i.e. specify a very small toy example (including generated data and the call to your function). Many people on this list are quite busy these days and don't want to think about how to call your function and invent an example ... Uwe Ligges> Thanks, > Sean > > > function(x,annot,rat1,rat2,rf,...) { > par(las=2) > wh <- which(annot[,5]==x) > xmax <- max(annot[wh,4]) > xmin <- min(annot[wh,3]) > chr <- annot[wh,2][1] > wh.rf <- rf$chrom==as.character(chr) & rf$txStart>xmin & rf$txEnd<xmax > par(mfrow=c(2,1)) > plot(annot[wh,3],rat1[wh],type="l",xlab="",ylab="log2 > Ratio",main=x,...) > points(annot[wh,3],rat1[wh]) > apply(rf[wh.rf,],1,function(z) { > browser() > if (z[4]=="+") { > color <- 'green' > yoffset=1 > } else { > color <- 'red' > yoffset=-1 > } > lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ > 10)),lwd=2,col=color) > lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ > 10)),lwd=2,col=color) > }) > abline(h=0,lty=2) > } > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html
Working on a toy example. I have run the debugger/browser on the example to find what line generates the error. However, I can't step into lines()--hence the question. Thanks for the help. Sean On Sep 24, 2004, at 12:18 PM, james.holtman at convergys.com wrote:> > > > > Can you provide an example. Have you run debug or browser on the > function? > __________________________________________________________ > James Holtman "What is the problem you are trying to solve?" > Executive Technical Consultant -- Office of Technology, Convergys > james.holtman at convergys.com > +1 (513) 723-2929 > > > > Sean Davis > <sdavis2 at mail.nih To: James > Holtman/CIMG/CVG at CVG > .gov> cc: > Subject: Re: [R] Error > with repeat lines() in function > 09/24/2004 12:11 > > > > > > > James, > > The first lines command works without a problem (the error is in the > second lines command), and it is identical to the second. That is the > confusing part. > > Sean > > On Sep 24, 2004, at 12:03 PM, james.holtman at convergys.com wrote: > >> >> >> >> >> I would assume that the data that you are passing into the function in >> the >> 'apply' statement might not have the dimensionality that you assume; >> e.g., >> z[5] or z[6] are out of range. Have you checked to make sure your >> data is >> correct? >> __________________________________________________________ >> James Holtman "What is the problem you are trying to solve?" >> Executive Technical Consultant -- Office of Technology, Convergys >> james.holtman at convergys.com >> +1 (513) 723-2929 >> >> >> >> Sean Davis >> <sdavis2 at mail.nih.gov To: r-help >> <r-help at stat.math.ethz.ch> >>> cc: >> Sent by: Subject: [R] Error >> with repeat lines() in function >> r-help-bounces at stat.m >> ath.ethz.ch >> >> >> 09/24/2004 11:48 >> >> >> >> >> >> >> I have a function that does some plotting. I then add lines to the >> plot. If executed one line at a time, there is not a problem. If I >> execute the function, though, I get: >> >> Error in ans[[1]] : subscript out of bounds >> >> This always occurs after the second lines command, and doesn't happen >> with all of my data points (some do not have errors). Any ideas? >> >> Thanks, >> Sean >> >> >> function(x,annot,rat1,rat2,rf,...) { >> par(las=2) >> wh <- which(annot[,5]==x) >> xmax <- max(annot[wh,4]) >> xmin <- min(annot[wh,3]) >> chr <- annot[wh,2][1] >> wh.rf <- rf$chrom==as.character(chr) & rf$txStart>xmin & >> rf$txEnd<xmax >> par(mfrow=c(2,1)) >> plot(annot[wh,3],rat1[wh],type="l",xlab="",ylab="log2 >> Ratio",main=x,...) >> points(annot[wh,3],rat1[wh]) >> apply(rf[wh.rf,],1,function(z) { >> browser() >> if (z[4]=="+") { >> color <- 'green' >> yoffset=1 >> } else { >> color <- 'red' >> yoffset=-1 >> } >> >> lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ >> 10)),lwd=2,col=color) >> >> lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ >> 10)),lwd=2,col=color) >> }) >> abline(h=0,lty=2) >> } >> >> ______________________________________________ >> R-help at stat.math.ethz.ch mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide! >> http://www.R-project.org/posting-guide.html >> >> > > >
james.holtman@convergys.com
2004-Sep-24 18:33 UTC
[R] Error with repeat lines() in function
The problem was is that you were not return a value from the apply function. It was trying to store the result of the apply into an array and there was no value. See the line I added in your function. __________________________________________________________ James Holtman "What is the problem you are trying to solve?" Executive Technical Consultant -- Office of Technology, Convergys james.holtman at convergys.com +1 (513) 723-2929 Sean Davis <sdavis2 at mail.nih.gov To: Uwe Ligges <ligges at statistik.uni-dortmund.de> > cc: r-help <r-help at stat.math.ethz.ch> Sent by: Subject: Re: [R] Error with repeat lines() in function r-help-bounces at stat.m ath.ethz.ch 09/24/2004 13:09 Here is an example that seems to reproduce the error: rf1 <- matrix(sort(abs(round(runif(4)*1000000))),nrow=1) annot1 <- sort(abs(round(runif(193)*1000000))) annot2 <- annot1 + 70 annot3 <- cbind(annot1,annot2) rat2 <- rnorm(193) rat1 <- rnorm(193) plotter <- function(annot,rat1,rat2,rf1,...) { par(las=2) xmax <- max(annot[,2]) xmin <- min(annot[,1]) par(mfrow=c(2,1)) plot(annot[,1],rat1,type="l",xlab="",ylab="log2 Ratio",...) points(annot[,1],rat1) apply(rf1,1,function(z) { if (z[4]=="+") { color <- 'green' yoffset=1 } else { color <- 'red' yoffset=-1 } lines(list(x=c(z[1],z[4]),y=c(-2-yoffset/10,-2-yoffset/ 10)),lwd=2,col=color) lines(list(x=c(z[2],z[3]),y=c(-2-yoffset/10,-2-yoffset/ 10)),lwd=4,col=color) 1 # fake a return value }) abline(h=0,lty=2) } plotter(annot3,rat1,rat2,rf1) Error in ans[[1]] : subscript out of bounds Enter a frame number, or 0 to exit 1:plotter(annot3, rat1, rat2, rf1) 2:apply(rf1, 1, function(z) { Selection: 0 On Sep 24, 2004, at 12:05 PM, Uwe Ligges wrote:> Sean Davis wrote: > >> I have a function that does some plotting. I then add lines to the >> plot. If executed one line at a time, there is not a problem. If I >> execute the function, though, I get: >> Error in ans[[1]] : subscript out of bounds >> This always occurs after the second lines command, and doesn't happen >> with all of my data points (some do not have errors). Any ideas? > > Please give an example how to produce the error, > i.e. specify a very small toy example (including generated data and > the call to your function). > Many people on this list are quite busy these days and don't want to > think about how to call your function and invent an example ... > > Uwe Ligges > > > >> Thanks, >> Sean >> function(x,annot,rat1,rat2,rf,...) { >> par(las=2) >> wh <- which(annot[,5]==x) >> xmax <- max(annot[wh,4]) >> xmin <- min(annot[wh,3]) >> chr <- annot[wh,2][1] >> wh.rf <- rf$chrom==as.character(chr) & rf$txStart>xmin & >> rf$txEnd<xmax >> par(mfrow=c(2,1)) >> plot(annot[wh,3],rat1[wh],type="l",xlab="",ylab="log2 >> Ratio",main=x,...) >> points(annot[wh,3],rat1[wh]) >> apply(rf[wh.rf,],1,function(z) { >> browser() >> if (z[4]=="+") { >> color <- 'green' >> yoffset=1 >> } else { >> color <- 'red' >> yoffset=-1 >> } >> lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ >> 10)),lwd=2,col=color) >> lines(list(x=c(z[5],z[6]),y=c(-2-yoffset/10,-2-yoffset/ >> 10)),lwd=2,col=color) >> }) >> abline(h=0,lty=2) >> } >> ______________________________________________ >> R-help at stat.math.ethz.ch mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide! >> http://www.R-project.org/posting-guide.html______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html