<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(51,0,0)">In the following example, it is about 15-25% faster to use setnames rather than j=list(name=var). Is there some better approach to referencing the other joined column when using roll?</div>
<div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(51,0,0)"><br></div><div class="gmail_default" style><div class="gmail_default" style><span style="color:rgb(51,0,0);font-family:'courier new',monospace"># Use j=list(name=var)</span><br>
</div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">calc1 <- function(d) {</font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">  d[ hit==1</font></div>
<div class="gmail_default" style><font color="#330000" face="courier new, monospace">   ][ d,list(hittime=time),roll=-20</font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">   ][ !<a href="http://is.na">is.na</a>(hittime)</font></div>
<div class="gmail_default" style><font color="#330000" face="courier new, monospace">   ]</font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">}</font></div><div class="gmail_default" style>
<font color="#330000" face="courier new, monospace"><br></font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace"># Use setnames</font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">calc2 <- function(d) {</font></div>
<div class="gmail_default" style><font color="#330000" face="courier new, monospace">  temp <- d[ hit==1</font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">           ][ d,time,roll=-20</font></div>
<div class="gmail_default" style><font color="#330000" face="courier new, monospace">           ]</font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">  setnames(temp,3,"hittime")</font></div>
<div class="gmail_default" style><font color="#330000" face="courier new, monospace">  temp[!<a href="http://is.na">is.na</a>(hittime)]</font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace">}</font></div>
<div class="gmail_default" style="color:rgb(51,0,0);font-family:georgia,serif;font-size:small"><br></div></div><div class="gmail_default"><font color="#330000" face="courier new, monospace"># Generate sample data</font></div>
<div class="gmail_default"><font color="#330000" face="courier new, monospace">set.seed(12312391)</font></div><div class="gmail_default"><font color="#330000" face="courier new, monospace">data <- data.table(</font></div>
<div class="gmail_default"><font color="#330000" face="courier new, monospace">          group = sample(1e3,1e7,replace=T),</font></div><div class="gmail_default"><font color="#330000" face="courier new, monospace">          time = ceiling(runif(1e7, 0, 1e5)),</font></div>
<div class="gmail_default"><font color="#330000" face="courier new, monospace">          hit = rbinom(1e7, 1, p = 0.1),</font></div><div class="gmail_default"><font color="#330000" face="courier new, monospace"><span class="" style="white-space:pre">       </span>  key=c("group","time"))</font></div>
<div class="gmail_default"><font color="#330000" face="courier new, monospace"><br></font></div><div class="gmail_default" style><font color="#330000" face="courier new, monospace"># Timing</font></div><div class="gmail_default" style>
<font color="#330000" face="courier new, monospace"><br></font></div><div class="gmail_default" style><span style="color:rgb(51,0,0);font-family:'courier new',monospace">system.time(replicate(10,{gc();calc1(data)})) => 69 sec system.time(replicate(10,{gc();calc2(data)})) => 52 sec</span><br>
</div></div>