[Rd] Inefficiency in df$col
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Mon Feb 4 15:32:11 CET 2019
On 04/02/2019 9:20 a.m., Radford Neal wrote:
>>> 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.
Sorry, I did misunderstand. Thanks for the clarification.
But if the "You" in your last sentence meant me, it needs to be "They":
I am not a member of R Core and can't make any changes to the sources.
Duncan Murdoch
More information about the R-devel
mailing list