An immutable data frame works like an ordinary data frame, except that when you subset it, it returns a reference to the original data frame, not a a copy. This makes subsetting substantially faster and has a big impact when you are working with large datasets with many groups.
idata.frame(df)an immutable data frame
This method is still a little experimental, so please let me know if you run into any problems.
system.time(dlply(baseball, "id", nrow))
#> user system elapsed
#> 0.065 0.001 0.066
system.time(dlply(idata.frame(baseball), "id", nrow))
#> user system elapsed
#> 0.07 0.00 0.07