> > I think you might want to just delete the definition of $.data.frame, > > reverting to the situation before R-3.1.0. > > I imagine the cause is that the list version is done in C code rather > than R code (i.e. there's no R function `$.list`). So an alternative > solution would be to also implement `$.data.frame` in the underlying C > code. This won't be quite as fast (it needs that test for NULL), but > should be close in the full match case.
I maybe wasn't completely clear. The $ operator for data frames was previously done in C - since it was done by the same primitive as for lists. In R-3.1.0, this was changed - producing a massive slowdown - for the purpose of giving a warning on partial matches even if the user had not set the warnPartialMatchDollar option to TRUE. In R-3.1.1, this was changed to not warn unless warnPartialMatchDollar was TRUE which was the PREVIOUS behaviour. In other words, this change reverted the change made in R-3.1.0. But instead of simply deleting the definition of $.data.frame, R-3.1.1 added extra code to it, the only effect of which is to slightly change the wording of the warning message from what is produced for any other list, while still retaining the massive slowdown. There is no need for you to write $.data.frame in C. You just need to delete the version written in R. Radford Neal ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel