On Wed, Jul 7, 2010 at 5:41 AM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote:
>>>> >>> >>> You want "as.expression(b1)", not "expression(b1)". The latter means >>> "the >>> expression consisting of the symbol b1". The former means "take the >>> object >>> stored in b1, and convert it to an expression.". >>> Thanks to Duncan and Allen, who pointed out that I was not even reading my own code carefully. I apologize for trying your patience. Before I stop swinging at this one, I still want to bother everybody about one thing, which really was the original question, but I did not know the words to ask it. The full code below is a working example that works, but I don't understand why. Focus on these two commands that produce 2 axes. Both produce the desired output, but, as far as I can see, they should not! 1: axis(1, line=6, at=mu+dividers*sigma, labels=as.expression(c(b1,b2,b3,b4,b5), padj=-1)) 2: axis(1, line=9, at=mu+dividers*sigma, labels=c(as.expression(b1),b2,b3,b4,b5), padj=-1) This second one shouldn't work, I think. It has as.expression on only the first element, and yet they all come out right. Is there a spill over effect? My original question should not have asked why b1 does not print correctly when I do this: axis(1, line=9, at=mu+dividers*sigma, labels=c(expression(b1),b2,b3,b4,b5), padj=-1) but the correct question should have been "why do b2, b3, b4 , and b5" get processed properly into plot math even though they are not expressions?? ??? pj ### Filename: plotMathProblem.R ### Paul Johnson July 7, 2010 ### email me <paulj...@ku.edu> sigma <- 10.0 mu <- 4.0 myx <- seq( mu - 3.5*sigma, mu+ 3.5*sigma, length.out=500) myDensity <- dnorm(myx,mean=mu,sd=sigma) ### xpd needed to allow writing outside strict box of graph ### Need big bottom margin to add several x axes par(xpd=TRUE, ps=10, mar=c(18,2,2,2)) plot(myx, myDensity, type="l", xlab="", ylab="Probability Density ", main=myTitle1, axes=FALSE) axis(2, pos= mu - 3.6*sigma) axis(1, pos=0) lines(c(myx[1],myx[length(myx)]),c(0,0)) ### closes off axes addInteriorLine <- function(x, m, sd){ for (i in 1:(length(x))){ lines( c(x[i],x[i]), c(0, dnorm(x[i],m=m,sd=sd)), lty= 14, lwd=.2) } } dividers <- c(qnorm(0.025), -1, 0, 1, qnorm(0.975)) addInteriorLine(mu+sigma*dividers, mu,sigma) # bquote creates an expression that text plotters can use t1 <- bquote( mu== .(mu)) mtext(bquote( mu == .(mu)), 1, at=mu, line=-1) addInteriorLabel <- function(pos1, pos2, m, s){ area <- abs(100*( pnorm(m+pos1*s,m,s)-pnorm(m+pos2*s, m,s))) mid <- m+0.5*(pos1+pos2)*s text(mid, 0.5*dnorm(mid,m,s),label=paste(round(area,2),"%")) } addInteriorLabel(dividers[1],dividers[2], mu, sigma) addInteriorLabel(dividers[2],dividers[3], mu, sigma) addInteriorLabel(dividers[3],dividers[4], mu, sigma) addInteriorLabel(dividers[4],dividers[5], mu, sigma) b1 <- substitute( mu - d*sigma, list(d=round(dividers[1],2)) ) b2 <- substitute( mu - sigma ) b3 <- substitute( mu ) b4 <- substitute( mu + sigma ) b5 <- substitute( mu + d*sigma, list(d=round(dividers[5],2)) ) axis(1, line=4, at=mu+dividers*sigma, labels=c(b1,b2,b3,b4,b5), padj=-1) axis(1, line=6, at=mu+dividers*sigma, labels=as.expression(c(b1,b2,b3,b4,b5), padj=-1)) axis(1, line=9, at=mu+dividers*sigma, labels=c(as.expression(b1),b2,b3,b4,b5), padj=-1) -- Paul E. Johnson Professor, Political Science 1541 Lilac Lane, Room 504 University of Kansas ______________________________________________ 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.