> On Nov 2, 2017, at 10:03 AM, Ed Siefker <ebs15...@gmail.com> wrote:
> 
> I don't really understand. I mean, I understand the solution is
> print(ggplot(...)).  But why is that required in a function and not at
> the console?

The REPL design of the interactive console is offered the user as a 
convenience, but I agree it's somewhat at odds with pure functional principles. 

> 
> Shouldn't I be able to rely on what I do at the console working in a
> script?  Is this inconsistent behavior by design?

By design? Yes. Completely by design. Functions are a method of encapsulating 
intermediate results in a manner that does not interact with the objects that 
exist outside the function. There are three plotting paradigms: base-graphics, 
lattice, and ggplot. The latter two are built with grid graphics and a both 
more functional and object oriented (loosely spoken since they return objects) 
than base graphics. Base graphics behaves the way you expect. Execution of 
`lines` or `points` will give you "pen-on-ink" output, actually pixel on device 
output.


> 
> 
> 
> On Thu, Nov 2, 2017 at 11:54 AM, David Winsemius <dwinsem...@comcast.net> 
> wrote:
>> 
>>> On Nov 2, 2017, at 9:27 AM, Ed Siefker <ebs15...@gmail.com> wrote:
>>> 
>>> I have a function:
>>> 
>>> myplot <- function (X) {
>>>   d <- plotCounts(dds2, gene=X, intgroup="condition", returnData=TRUE)
>>>   png(paste("img/", X, ".png", sep=""))
>>>   ggplot(d, aes(x=condition, y=count, color=condition)) +
>>>       geom_point(position=position_jitter(w=0.1,h=0)) +
>>>       scale_y_log10(breaks=c(25,100,400)) +
>>>       ggtitle(X) +
>>>       theme(plot.title = element_text(hjust = 0.5))
>>> 
>>>   dev.off()
>>>   }
>>> 
>>> 'd' is a dataframe
>>> 
>>>                            count      condition
>>> E11.5 F20HET BA40_quant   955.9788   E11.5 F20HET
>>> E11.5 F20HET BA45_quant   796.2863   E11.5 F20HET
>>> E11.5 F20HET BB84_quant   745.0340   E11.5 F20HET
>>> E11.5 F9.20DKO YEH3_quant 334.2994 E11.5 F9.20DKO
>>> E11.5 F9.20DKO fkm1_quant 313.7307 E11.5 F9.20DKO
>>> E11.5 F9.20DKO zzE2_quant 349.3313 E11.5 F9.20DKO
>>> 
>>> If I set X="Etv5" and paste the contents of the function into R, I get
>>> 'img/Etv5.png'
>>> If I run myplot(X), I get nothing.
>>> 
>>> 
>>>> X
>>> [1] "Etv5"
>>>> list.files("img")
>>> character(0)
>>>> myplot(X)
>>> null device
>>>         1
>>>> list.files("img")
>>> character(0)
>>>> d <- plotCounts(dds2, gene=X, intgroup="condition", returnData=TRUE)
>>>> png(paste("img/", X, ".png", sep=""))
>>>> ggplot(d, aes(x=condition, y=count, color=condition)) +
>>> + geom_point(position=position_jitter(w=0.1,h=0)) +
>>> + scale_y_log10(breaks=c(25,100,400)) +
>>> + ggtitle(X) +
>>> + theme(plot.title = element_text(hjust = 0.5))
>>>> dev.off()
>>> null device
>>>         1
>>>> list.files("img")
>>> [1] "Etv5.png"
>>> 
>>> Why doesn't my function work?
>> 
>> `ggplot` creates an object. You need to print it when used inside a 
>> function. Inside a function (in a more restricted environment) there is no 
>> parse-eval-print-loop.
>> 
>> 
>>> 
>>> ______________________________________________
>>> R-help@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.
>> 
>> David Winsemius
>> Alameda, CA, USA
>> 
>> 'Any technology distinguishable from magic is insufficiently advanced.'   
>> -Gehm's Corollary to Clarke's Third Law
>> 
>> 
>> 
>> 
>> 
> 
> ______________________________________________
> R-help@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.

David Winsemius
Alameda, CA, USA

'Any technology distinguishable from magic is insufficiently advanced.'   
-Gehm's Corollary to Clarke's Third Law

______________________________________________
R-help@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.

Reply via email to