<div><div style="background-color:rgb(255,255,255)"><div>My apologies, I had a mistake in my previous email.  (I forgot that data.table does not coerce strings to factor)</div><div>It looks like the `rbindlist` behavior observed occurs for <i><b>both</b></i>, a list of data.tables and a list of data.frames (assuming, of course, that there is factor column present)</div>
<div><br></div><div>    # sample data, using data.frame</div><div>    set.seed(1)</div><div>    sampleList.DF <- lapply(LETTERS[1:5], function(L) </div><div>      data.frame(Val1=rnorm(3), Val2=runif(3), FactorCol=factor(L)) )</div>
<div>    sampleList.DF <- lapply(sampleList.DF, function(x) </div><div>      {x$StringCol <- as.character(x$FactorCol); x})</div><div><br></div><div>    # sample data, using data.table</div><div>    set.seed(1)</div>
<div>    sampleList.DT <- lapply(LETTERS[1:5], function(L) </div><div>      data.table(Val1=rnorm(3), Val2=runif(3), FactorCol=factor(L)) )</div><div>    sampleList.DT <- lapply(sampleList.DT, function(x) </div><div>
       x[, StringCol := as.character(FactorCol)])</div><div><br></div><div><br></div><div># rbindlist results: </div><div><br></div><div>    rbindlist(sampleList.DT)</div><div>    rbindlist(sampleList.DF)</div><div><br></div>
<div># expected behavior similiar to do.call(rbind, LIST)</div><div><br></div><div>    do.call(rbind, sampleList.DF)</div><div>    do.call(rbind, sampleList.DT)</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px">
<br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px"><br></div></div></div>
<br><br><div class="gmail_quote">On Thu, Mar 28, 2013 at 12:52 PM, Ricardo Saporta <span dir="ltr"><<a href="mailto:saporta@scarletmail.rutgers.edu" target="_blank">saporta@scarletmail.rutgers.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Hello, </div><div><br></div><div>I found that when using `rbindlist` on a list of data.frames with factor columns, the factor column is getting concat'd as its numeric equivalent. </div>
<div><br></div><div>This of course, does not happen when using a list of data.tables.  </div>
<div><br></div><div>    # sample data, using data.frame</div><div>    sampleList.DF <- lapply(LETTERS[1:5], function(L) </div><div>      data.frame(Val1=rnorm(3), Val2=runif(3), FactorCol=L) )</div><div><br></div><div>

    sampleList.DF <- lapply(sampleList.DF, function(x) </div><div>      {x$StringCol <- as.character(x$FactorCol); x})</div><div><br></div><div>    # sample data, using data.table</div><div>    sampleList.DT <- lapply(LETTERS[1:5], function(L) </div>

<div>      data.table(Val1=rnorm(3), Val2=runif(3), FactorCol=L) )</div><div>    sampleList.DT <- lapply(sampleList.DT, function(x) </div><div>       x[, StringCol := as.character(FactorCol)])</div><div><br></div><div>

<br></div><div># Compare the column `FactorCol`: </div><div><br></div><div>    rbindlist(sampleList.DT)</div><div>    rbindlist(sampleList.DF)</div><div>    do.call(rbind, sampleList.DF)</div><div><br></div><div>Interestingly, I originally thought it was levels dependent: </div>

<div>(I would have expected, for example, the following to allow for the levels of the third list element, but it does not).</div><div><br></div><div>    sampleList.DF[[1]][, "FactorCol"] <- factor(c("A", "C", "A"))</div>

<div>    </div><div>    # all the levels in third element are present in the first</div><div>    all(levels(sampleList.DF[[3]][, "FactorCol"])  %in%  levels(sampleList.DF[[1]][, "FactorCol"]))</div><div>

    # [1] TRUE</div><div><br></div><div>But... </div><div><br></div><div>    rbindlist(sampleList.DF)</div><div><br></div><div>However: </div><div><br></div><div>    sampleList.DF[[1]][, "FactorCol"] <- factor(c("C", "A", "A"), levels=c("C", "A"))</div>

<div>    rbindlist(sampleList.DF)</div><div>    </div><div>Is the above behavior intended? </div><div><br></div><div>Cheers, </div><div>Rick</div><div><br></div>
</blockquote></div><br>