Envoyé de mon iPhone
> Le 23 avr. 2015 à 04:23, Charles C. Berry <ccbe...@ucsd.edu> a écrit : > >> On Wed, 22 Apr 2015, Thomas S. Dye wrote: >> >> Aloha all, >> >> Prior to eaa3a761dae, when working in a session, I was able to run this >> R source code block without problems: >> >> ,----------------------------------------- >> | #+header: :file r/adze_wt_log.pdf >> | #+header: :results output graphics >> | #+header: :width 4 :height 3 >> | #+begin_src R >> | g <- ggplot(x, aes(x = weight)) >> | g + geom_histogram(aes(y=..density..)) > > ## Try this: > > print( g + geom_histogram(aes(y=..density..)) ) # before rm(g). > > >> | rm(g) >> | #+end_src >> `----------------------------------------- >> >> After eaa3a761dae, I get an error and an empty output file. > > That commit introduced a tryCatch() wrapper for graphics results. > > You probably know that ggplot (or ggplot2) relies on printing of objects to > produce graphics (see R-FAQ 7.22). > > tryCatch(expr,...) evaluates expr and returns its value, which is `rm(g)' in > your case. But `rm(g)' is not autoprinted, and you get an empty file. I am not in front of my computer but there must be more, as even before the commit there should have been empty file for exactly the same reason. Also, the error is strange. Could you send a small reproducable example, so that we can see which error you get? Because if you get an error and an empty file, an error must be in the tryCatcb block. Thanks, Rainer > >> I can work around this error by removing the line "rm(g)", > > Right. Then, the expression returned by tryCatch is > > g + geom_histogram(aes(y=..density..)) > > which is autoprinted giving the graph. > > When in doubt, there is no harm in explicitly print()ing objects that would > have been autoprinted otherwise. > > For reference, here is what org-babel-execute:R produces for your src block > (lightly formatted for readability): > > #+BEGIN_SRC R > pdf(file=\"r/adze_wt_log.pdf\",width=4,height=3) > tryCatch({ > g <- ggplot(x, aes(x = weight)) > g + geom_histogram(aes(y=..density..)) > rm(g) > }, > error=function(e){ > plot(x=-1:1, y=-1:1, type='n', xlab='', ylab='', > axes=FALSE) > text(x=0, y=0, labels=e$message, col='red') > paste('ERROR', e$message, sep=' : ')}) > dev.off() > #+END_SRC > > HTH, > > Chuck >