Hi Matthew,<div><br></div><div>Many thanks for your quick reply.</div><div><br></div><div>I had indeed not realized that a[[colname]] would work just fine.  I also found a[, eval(<a href="http://as.name">as.name</a>(colname))] to work, albeit the syntax is messier than the double bracket.</div>

<div><br></div><div>Thanks again,</div><div>+ Nicolas<br><br></div><div><br><div class="gmail_quote">On Tue, Aug 31, 2010 at 3:35 AM, Matthew Dowle <span dir="ltr">&lt;<a href="mailto:mdowle@mdowle.plus.com">mdowle@mdowle.plus.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
Nicolas,<br>
<br>
Welcome to the list.<br>
<br>
Where the documentation mentions &#39;quoted&#39; it means the quote() function<br>
to create an expression, not as in a character string. Alternatively you<br>
can use [[ in the usual way since a data.table is a list.<br>
<br>
&gt; colexp = quote(y)   # rather than &quot;y&quot;<br>
&gt; a[,eval(colexp)]<br>
 [1] &quot;2010-01-01 GMT&quot; &quot;2010-01-02 GMT&quot; &quot;2010-01-03 GMT&quot; &quot;2010-01-04 GMT&quot;<br>
 [5] &quot;2010-01-05 GMT&quot; &quot;2010-01-06 GMT&quot; &quot;2010-01-07 GMT&quot; &quot;2010-01-08 GMT&quot;<br>
 [9] &quot;2010-01-09 GMT&quot; &quot;2010-01-10 GMT&quot; &quot;2010-01-11 GMT&quot;<br>
<br>
or<br>
<br>
&gt; colname = &quot;y&quot;<br>
&gt; a[[colname]]<br>
 [1] &quot;2010-01-01 GMT&quot; &quot;2010-01-02 GMT&quot; &quot;2010-01-03 GMT&quot; &quot;2010-01-04 GMT&quot;<br>
 [5] &quot;2010-01-05 GMT&quot; &quot;2010-01-06 GMT&quot; &quot;2010-01-07 GMT&quot; &quot;2010-01-08 GMT&quot;<br>
 [9] &quot;2010-01-09 GMT&quot; &quot;2010-01-10 GMT&quot; &quot;2010-01-11 GMT&quot;<br>
&gt;<br>
<br>
A single column name is a special case of expressions so although this<br>
can create a steeper learner curve, it results in more power and<br>
flexibility later.<br>
<br>
Suggestions on how to improve documentation so that &#39;quoting&#39; is clearer<br>
are very welcome. I&#39;ve added an item to the list so we don&#39;t forget.<br>
<br>
Matthew<br>
<div><div></div><div class="h5"><br>
<br>
On Mon, 2010-08-30 at 23:59 -0400, Nicolas Chapados wrote:<br>
&gt; Dear data.table friends and maintainers,<br>
&gt;<br>
&gt;<br>
&gt; First, thanks to the authors for this excellent package: it really<br>
&gt; fills a void in the R world.  However, I have a question: I&#39;m looking<br>
&gt; to have an efficient conversion of a data table object to a vector (of<br>
&gt; the correct type) when querying a single column whose name is stored<br>
&gt; in a variable.  As per the vignette and the FAQ, I use the syntax<br>
&gt;<br>
&gt;<br>
&gt;     my.data.table[, colname, with=FALSE]<br>
&gt;<br>
&gt;<br>
&gt; (where colname is a variable containing my desired column name) but<br>
&gt; this returns another data table, not a vector.  Morever, the eval<br>
&gt; syntax suggested in the FAQ simply does not work:<br>
&gt;<br>
&gt;<br>
&gt;     my.data.table[, eval(colname)]<br>
&gt;<br>
&gt;<br>
&gt; See example below.  I could use as.matrix on the result, but this<br>
&gt; carries out undesirable type conversion in the case of columns<br>
&gt; containing dates: see below.<br>
&gt;<br>
&gt;<br>
&gt; Here is an example to reproduce this problem:<br>
&gt;<br>
&gt;<br>
&gt; &gt; require(data.table)<br>
&gt; Loading required package: data.table<br>
&gt; &gt; a &lt;- data.table(x=seq(1, 2, by=0.1), y=seq(as.POSIXct(&quot;2010-01-01&quot;),<br>
&gt; as.POSIXct(&quot;2010-01-11&quot;), length.out=11))<br>
&gt; &gt; a<br>
&gt;         x          y<br>
&gt;  [1,] 1.0 2010-01-01<br>
&gt;  [2,] 1.1 2010-01-02<br>
&gt;  [3,] 1.2 2010-01-03<br>
&gt;  [4,] 1.3 2010-01-04<br>
&gt;  [5,] 1.4 2010-01-05<br>
&gt;  [6,] 1.5 2010-01-06<br>
&gt;  [7,] 1.6 2010-01-07<br>
&gt;  [8,] 1.7 2010-01-08<br>
&gt;  [9,] 1.8 2010-01-09<br>
&gt; [10,] 1.9 2010-01-10<br>
&gt; [11,] 2.0 2010-01-11<br>
&gt; &gt; colname &lt;- &quot;y&quot;<br>
&gt;<br>
&gt;<br>
&gt; ## The following returns a data table.  How can I get a vector, and<br>
&gt; still preserve type information?<br>
&gt; &gt; a[, colname, with=FALSE]<br>
&gt;                y<br>
&gt;  [1,] 2010-01-01<br>
&gt;  [2,] 2010-01-02<br>
&gt;  [3,] 2010-01-03<br>
&gt;  [4,] 2010-01-04<br>
&gt;  [5,] 2010-01-05<br>
&gt;  [6,] 2010-01-06<br>
&gt;  [7,] 2010-01-07<br>
&gt;  [8,] 2010-01-08<br>
&gt;  [9,] 2010-01-09<br>
&gt; [10,] 2010-01-10<br>
&gt; [11,] 2010-01-11<br>
&gt;<br>
&gt;<br>
&gt; ## The eval recipe suggested in the FAQ does not work.<br>
&gt; &gt; a[, eval(colname)]<br>
&gt; [1] &quot;y&quot;<br>
&gt;<br>
&gt;<br>
&gt; ## as.vector does not convert away from data.table<br>
&gt; &gt; as.vector(a[, colname, with=FALSE])<br>
&gt;                y<br>
&gt;  [1,] 2010-01-01<br>
&gt;  [2,] 2010-01-02<br>
&gt;  [3,] 2010-01-03<br>
&gt;  [4,] 2010-01-04<br>
&gt;  [5,] 2010-01-05<br>
&gt;  [6,] 2010-01-06<br>
&gt;  [7,] 2010-01-07<br>
&gt;  [8,] 2010-01-08<br>
&gt;  [9,] 2010-01-09<br>
&gt; [10,] 2010-01-10<br>
&gt; [11,] 2010-01-11<br>
&gt; &gt; class(as.vector(a[, colname, with=FALSE]))<br>
&gt; [1] &quot;data.table&quot;<br>
&gt;<br>
&gt;<br>
&gt; ## as.matrix loses type information (NOTE: in my case it is not<br>
&gt; acceptable to<br>
&gt; ## convert this character vector back to a POSIXct, due to the loss of<br>
&gt; important<br>
&gt; ## timezone information. Furthermore, this would be very inefficient.)<br>
&gt; &gt; as.matrix(a[, colname, with=FALSE])<br>
&gt;       y<br>
&gt;  [1,] &quot;2010-01-01&quot;<br>
&gt;  [2,] &quot;2010-01-02&quot;<br>
&gt;  [3,] &quot;2010-01-03&quot;<br>
&gt;  [4,] &quot;2010-01-04&quot;<br>
&gt;  [5,] &quot;2010-01-05&quot;<br>
&gt;  [6,] &quot;2010-01-06&quot;<br>
&gt;  [7,] &quot;2010-01-07&quot;<br>
&gt;  [8,] &quot;2010-01-08&quot;<br>
&gt;  [9,] &quot;2010-01-09&quot;<br>
&gt; [10,] &quot;2010-01-10&quot;<br>
&gt; [11,] &quot;2010-01-11&quot;<br>
&gt; &gt; mode(as.matrix(a[, colname, with=FALSE]))<br>
&gt; [1] &quot;character&quot;<br>
&gt;<br>
&gt;<br>
&gt; ## Finally, one could go through a data.frame, but this is inefficient<br>
&gt; ## and it sorts of defeats the purpose of using data.table...<br>
&gt; &gt; as.data.frame(a[, colname, with=FALSE])[, colname]<br>
&gt;  [1] &quot;2010-01-01 EST&quot; &quot;2010-01-02 EST&quot; &quot;2010-01-03 EST&quot; &quot;2010-01-04<br>
&gt; EST&quot;<br>
&gt;  [5] &quot;2010-01-05 EST&quot; &quot;2010-01-06 EST&quot; &quot;2010-01-07 EST&quot; &quot;2010-01-08<br>
&gt; EST&quot;<br>
&gt;  [9] &quot;2010-01-09 EST&quot; &quot;2010-01-10 EST&quot; &quot;2010-01-11 EST&quot;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; So at this point, my imagination is running out and I&#39;m turning to<br>
&gt; this list for suggestions. This should seem to be a fairly frequent<br>
&gt; use-case, and I&#39;m surprised it does not appear to have previously been<br>
&gt; addressed.<br>
&gt;<br>
&gt;<br>
&gt; For the record, here is my sessionInfo()<br>
&gt;<br>
&gt;<br>
&gt; &gt; sessionInfo()<br>
&gt; R version 2.9.2 (2009-08-24)<br>
&gt; x86_64-pc-linux-gnu<br>
&gt;<br>
&gt;<br>
&gt; locale:<br>
&gt; C<br>
&gt;<br>
&gt;<br>
&gt; attached base packages:<br>
&gt; [1] stats     graphics  grDevices utils     datasets  methods   base<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; other attached packages:<br>
&gt; [1] data.table_1.4.1<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Thanks in advance for any help!<br>
&gt; + Nicolas Chapados<br>
</div></div>&gt; _______________________________________________<br>
&gt; datatable-help mailing list<br>
&gt; <a href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a><br>
&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>
<br>
<br>
</blockquote></div><br></div>