<div class="gmail_quote">You are right -- I should have given a bit more context.</div><div class="gmail_quote"><br></div><div class="gmail_quote">1) The usual ggplot2 syntax mostly works with data.tables, though sometimes coercing to a data.frame is necessary. I do not have a reproducible example of that at hand, but I thought it&#39;s probably something that would require a fix in ggplot2, and not data.table. I&#39;ll try to find you a reproducible example if that&#39;s useful.</div>



<div class="gmail_quote"><br></div><div class="gmail_quote">2) What I wanted to allow, was to call ggplot inside a data.table call, e.g. </div><div class="gmail_quote"><br></div><div class="gmail_quote">test &lt;- data.table(</div>



<div class="gmail_quote">                   a=rnorm(4*26), </div><div class="gmail_quote">                   b=letters</div><div class="gmail_quote">                   )</div><div class="gmail_quote">test[,</div><div class="gmail_quote">



  list(y=max(a)), </div><div class="gmail_quote">  by=b</div><div class="gmail_quote">][,</div><div class="gmail_quote">  ggplotDT(x=b, y=y) + </div><div class="gmail_quote">  geom_point() +</div><div class="gmail_quote">



  scale_x_discrete(&quot;group&quot;) +</div><div class="gmail_quote">  scale_y_continuous(&quot;maximum&quot;) +</div><div class="gmail_quote">  coord_flip()</div><div class="gmail_quote">]</div><div class="gmail_quote">



<div class="gmail_quote"><br></div><div class="gmail_quote">I would otherwise have to create an object specifically to contain the data to plot, which often I find to be a superfluous step. But maybe that&#39;s just me, and that&#39;s a minor point anyway.</div>



<div class="gmail_quote"><br></div><div>By default, ggplot() (and more specifically aes()) looks only at two environments: the global environment, and the data.frame provided as its first argument. That means that with(DF, ggplot(, aes(...)) + ...) doesn&#39;t work; neither does DT[, ggplot(, aes(...)) + ...]. With aesDT, provided in my previous email, these uses become possible.</div>



</div><div class="gmail_quote"><br></div><div class="gmail_quote"><br></div><div class="gmail_quote">On Aug 14, 2011 11:34 PM, &quot;Matthew Dowle&quot; &lt;<a href="mailto:mdowle@mdowle.plus.com" target="_blank">mdowle@mdowle.plus.com</a>&gt; wrote:<br type="attribution">



&gt; <br>&gt; I&#39;m not a ggplot2 expert by any means but I thought tests 167 and 168<br>
&gt; already tested compatibility. It needs to be called in the following<br>&gt; way, though :<br>&gt; <br>&gt; DT &lt;- data.table(a=1:10, b=1:10)<br>&gt; ggplot(DT,aes(x=a,y=b))+geom_line()<br>&gt; <br>&gt; If you have ggplot2 loaded, then running test.data.table() should flash<br>




&gt; up the ggplot2 plots.<br>&gt; <br>&gt; Are these forms ok or am I missing something?<br>&gt; <br>&gt; Matthew<br>&gt; <br>&gt; <br>&gt; On Sun, 2011-08-14 at 21:55 +0100, Timothée Carayol wrote:<br>&gt;&gt; Ah sorry -- the definition of ggplotDT() should be, of course:<br>




&gt;&gt; <br>&gt;&gt; <br>&gt;&gt; ggplotDT &lt;- function(...) {<br>&gt;&gt;  ggplot(, aesDT(...))<br>&gt;&gt; }<br>&gt;&gt; <br>&gt;&gt; <br>&gt;&gt; (aes_now() was an artifact from Hadley Wickham&#39;s Stack Overflow tip)<br>




&gt;&gt; <br>&gt;&gt; <br>&gt;&gt; t<br>&gt;&gt; <br>&gt;&gt; <br>&gt;&gt; <br>&gt;&gt; 2011/8/14 Timothée Carayol &lt;<a href="mailto:timothee.carayol@gmail.com" target="_blank">timothee.carayol@gmail.com</a>&gt;<br>&gt;&gt;         Hi,<br>




&gt;&gt;         <br>&gt;&gt;         For some time I have been wishing that data.table and ggplot2<br>&gt;&gt;         could play a bit nicer together.<br>&gt;&gt;         For example, I would like this to work but it doesn&#39;t:<br>




&gt;&gt;         <br>&gt;&gt;         &gt; test &lt;- data.table(a=1:10, b=1:10)<br>&gt;&gt;         &gt; test[, ggplot() + geom_line(aes(x=a, y=b))]<br>&gt;&gt;         Error in eval(expr, envir, enclos) : object &#39;a&#39; not found<br>




&gt;&gt;         <br>&gt;&gt;         I spent a few dozen minutes trying to understand what was<br>&gt;&gt;         going on (and stumbling upon this useful advice from Hadley<br>&gt;&gt;         Wickham), and it turns out that it&#39;s very easy to fix (though<br>




&gt;&gt;         the fix is not very pretty).<br>&gt;&gt;         Datatable-help, I present you with.. aesDT and ggplotDT.<br>&gt;&gt;         <br>&gt;&gt;         <br>&gt;&gt;         aesDT &lt;- function(...) {<br>&gt;&gt;          aes &lt;- structure(list(...),  class = &quot;uneval&quot;)<br>




&gt;&gt;          rename_aes(aes)<br>&gt;&gt;         }<br>&gt;&gt;         <br>&gt;&gt;         Using aesDT() instead of aes() whenever you are in a<br>&gt;&gt;         data.table (or in a with()) will now work. That is pretty much<br>




&gt;&gt;         all you need, but I thought I&#39;d go just one tiny step further<br>&gt;&gt;         with ggplotDT():<br>&gt;&gt;         <br>&gt;&gt;         ggplotDT &lt;- function(...) {<br>&gt;&gt;          ggplot(, aes_now(...))<br>




&gt;&gt;         }<br>&gt;&gt;         <br>&gt;&gt;         which makes the following possible:<br>&gt;&gt;         <br>&gt;&gt;         test[, ggplotDT(x=a, y=b) + geom_line()]<br>&gt;&gt;         <br>&gt;&gt;         i.e. put the aesthetics directly as arguments, saving a few<br>




&gt;&gt;         keystrokes and a pair of brackets.<br>&gt;&gt;         Tiny problem that I have yet to solve: you now have to<br>&gt;&gt;         explicitly give the name of all the aesthetics; aes() is<br>&gt;&gt;         sufficiently clever to guess them if they&#39;re in the right<br>




&gt;&gt;         order, but the logic does not seem to carry over<br>&gt;&gt;         straightforwardly to aesDT().<br>&gt;&gt;         <br>&gt;&gt;         <br>&gt;&gt;         I know I&#39;ll be using these, so I thought maybe other people<br>




&gt;&gt;         here might be interested.<br>&gt;&gt;         <br>&gt;&gt;         <br>&gt;&gt;         Timothee<br>&gt;&gt; <br>&gt;&gt; <br>&gt;&gt; _______________________________________________<br>&gt;&gt; datatable-help mailing list<br>




&gt;&gt; <a href="mailto:datatable-help@lists.r-forge.r-project.org" target="_blank">datatable-help@lists.r-forge.r-project.org</a><br>&gt;&gt; <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a><br>




&gt; <br>&gt; <br></div>