Ok, thanks for your answer, but I wasn&#39;t clear enough. So here are more details of what I want to do.<br><br>I have one list named &quot;probes&quot;:<br>probes &lt;- list(chr1=data.frame(name=c(&quot;p1&quot;,&quot;p2&quot;),<br>

                 start=c(81,95),<br>                 end=c(85,100),<br>                 stringsAsFactors=FALSE))<br><br>I also have one list named &quot;genes&quot;:<br>genes &lt;- list(chr1=data.frame(name=c(&quot;g1&quot;,&quot;g2&quot;), start=c(11,111), end=c(90,190)),<br>

                chr2=data.frame(name=&quot;g3&quot;, start=11, end=90))<br><br>I need to compare those two lists in order to obtain the following list which contains, for each gene, the name of the probes included in it:<br>

links &lt;- list(chr1=list(g1=c(&quot;p1&quot;)))<br><br>Here is my R function (assuming that the probes are sorted based on their start and end coordinates):<br><br>fun.l &lt;- function(genes, probes){<br>  links &lt;- lapply(names(genes), function(<a href="http://chr.name">chr.name</a>){<br>

    if(! <a href="http://chr.name">chr.name</a> %in% names(probes))<br>      return(NULL)<br>    <br>    res &lt;- list()<br>    <br>    genes.c &lt;- genes[[<a href="http://chr.name">chr.name</a>]]<br>    probes.c &lt;- probes[[<a href="http://chr.name">chr.name</a>]]<br>

    <br>    for(<a href="http://gene.name">gene.name</a> in genes.c$name){<br>      gene &lt;- genes.c[genes.c$name == <a href="http://gene.name">gene.name</a>,]<br>      res[[<a href="http://gene.name">gene.name</a>]] &lt;- vector()<br>

      for(<a href="http://probe.name">probe.name</a> in probes.c$name){<br>        probe &lt;- probes.c[probes.c$name == <a href="http://probe.name">probe.name</a>,]<br>        if(probe$start &gt;= gene$start &amp;&amp; probe$end &lt;= gene$end)<br>

          res[[<a href="http://gene.name">gene.name</a>]] &lt;- append(res[[<a href="http://gene.name">gene.name</a>]], <a href="http://probe.name">probe.name</a>)<br>        else if(probe$start &gt; gene$end)<br>          break<br>

      }<br>      if(length(res[[<a href="http://gene.name">gene.name</a>]]) == 0)<br>        res[[<a href="http://gene.name">gene.name</a>]] &lt;- NULL<br>    }<br>    <br>    if(length(res) == 0)<br>      res &lt;- NA<br>

    return(res)<br>  })<br>  names(links) &lt;- names(genes)<br>  links &lt;- Filter(function(links.c){!is.null(links.c)}, links)<br>  return(links)<br>}<br><br>And here is the beginning of my attempt using Rcpp:<br><br>
src &lt;- &#39;<br>
using namespace Rcpp;<br><br>List genes = List(genes_in);<br>int genes_nb_chr = genes.length();<br>std::vector&lt;std::string&gt; genes_chr = genes.names();<br><br>List probes = List(probes_in);<br>int probes_nb_chr = probes.length();<br>

<br>std::vector&lt; std::vector&lt;std::string&gt; &gt; links;<br><br>// the main task is performed in this loop<br>for(int chrnum=0; chrnum&lt;genes_nb_chr; ++chrnum){<br>  DataFrame genes_c = DataFrame(genes[chrnum]);<br>

  // ... add code to map probes on genes, that is fill &quot;links&quot; ...<br>}<br><br>return wrap(links);<br>&#39;<br><br>funC &lt;- cxxfunction(signature(genes_in=&quot;list&quot;,<br>                                probes_in=&quot;list&quot;),<br>

                      body=src, plugin=&quot;Rcpp&quot;)<br><br>The problem starts quite early: when I compile this piece of code, I get &quot;error: call of overloaded ‘DataFrame(Rcpp::internal::generic_proxy&lt;19&gt;)’ is ambiguous&quot;.<br>

<br>What should I do to go through the &quot;probes&quot; and &quot;genes&quot; lists given as input? Maybe more generically, how can we go through a list of lists (of lists...) with Rcpp?<br><br>2nd (small) question, I don&#39;t manage to use Rprintf when using inline, for instance Rprintf(&quot;%d\n&quot;, i);, it complains about the quotes. What should I do to print statement from within the for loop?<br>

<br>Thanks in advance. As my question is very long, I won&#39;t mind if you tell me to find another way by myself. But maybe one of you can put me on the good track.<br><br><div class="gmail_quote">On Thu, Aug 11, 2011 at 7:00 AM, Dirk Eddelbuettel <span dir="ltr">&lt;<a href="mailto:edd@debian.org">edd@debian.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im"><br>
On 11 August 2011 at 03:06, Walrus Foolhill wrote:<br>
| Hello,<br>
| I need to create a list and then fill it sequentially by adding components in a<br>
| for loop. Here is an example that works:<br>
|<br>
| library(inline)<br>
| src &lt;- &#39;<br>
| Rcpp::List mylist(2);<br>
| for(int i=0; i&lt;2; ++i)<br>
|   mylist[i] = i;<br>
| mylist.names() = CharacterVector::create(&quot;a&quot;,&quot;b&quot;);<br>
| return mylist;<br>
| &#39;<br>
| fun &lt;- cxxfunction(body=src, plugin=&quot;Rcpp&quot;)<br>
| print(fun())<br>
|<br>
| But what I really want is to create an empty list and then fill it, that is<br>
| without specifying its number of components before hand... This is because I<br>
| don&#39;t know in advance at which step of the for loop I will need to create a new<br>
| component. Here is an example, that obviously doesn&#39;t work, but that should<br>
| show what I am looking for:<br>
|<br>
| Rcpp::List mylist;<br>
| CharacterVector names = CharacterVector::create(&quot;a&quot;, &quot;b&quot;);<br>
<br>
</div>If you know how long names is, you know how long mylist going to be ....<br>
<div class="im"><br>
| for(int i=0; i&lt;2; ++i){<br>
|   mylist.add(names[i], IntegerVector::create());<br>
|   mylist[names[i]].push_back(i);<br>
<br>
</div>I don&#39;t understand what that is trying to do.<br>
<div class="im"><br>
| }<br>
| return mylist;<br>
|<br>
| Do you know how I could achieve this? Thanks.<br>
<br>
</div>Rcpp::List is an alias for Rcpp::GenericVector, and derives from Vector. You<br>
can look at the public member functions -- there are things like<br>
<br>
    push_back()<br>
    push_front()<br>
    insert()<br>
<br>
etc that behave like STL functions __but are inefficient as we (almost<br>
always) need to copy the whole object__ so they are not recommended.<br>
<br>
When I had to deal with &#39;unknown quantities of data&#39; returning I was mostly<br>
able to either turn it into a &#39;fixed or known columns, unknow rows&#39; problem<br>
(easy, just grow row-wise) or I &#39;cached&#39; in a C++ data structure first before<br>
returning to R via Rcpp structures -- and then I knew the dimensions for the<br>
to-be-created object too.<br>
<br>
Dirk<br>
<font color="#888888"><br>
<br>
--<br>
Two new Rcpp master classes for R and C++ integration scheduled for<br>
New York (Sep 24) and San Francisco (Oct 8), more details are at<br>
<a href="http://dirk.eddelbuettel.com/blog/2011/08/04#rcpp_classes_2011-09_and_2011-10" target="_blank">http://dirk.eddelbuettel.com/blog/2011/08/04#rcpp_classes_2011-09_and_2011-10</a><br>
</font></blockquote></div><br>