[R] name scoping within dataframe index
Duncan Murdoch
murdoch at stats.uwo.ca
Mon Jan 26 20:43:05 CET 2009
On 1/26/2009 2:20 PM, Alexy Khrabrov wrote:
> On Jan 26, 2009, at 2:12 PM, Duncan Murdoch wrote:
>>>> df[get("colname", parent.frame()) == value,]
>>> Actually, what I propose is a special search rule which simply
>>> looks at the enclosing dataframe.name[...] outside the brackets
>>> and looks up the columns first.
>>
>> Yes, I understood that, and I explained why it would be a bad idea.
>
> Well this is the case in all programming languages with scoping where
> inner-scope variables override the outer ones. Usually it's solved
> with prefixing with the outer scope, outercsope.name or
> outerscope::name or so. So it only underscores the need to improve
> scoping access in R.
>
> Dataframe column names belong to the dataframe object and the natural
> thing would be to enable easy access to naming; you'd need to apply an
> extra effort to access an overridden unrelated external variable.
> Again, just an analogy from other programming languages.
The issue is that in most cases the outer scope would be unnamed: it's
the one that currently doesn't need a prefix. So if we have a prefix
meaning "this scope", why wouldn't that evaluate to "df" in that
context? I guess we need a prefix meaning "the caller's scope", but
that's just going to lead to confusion: is it the caller of the
function that is trying to index df, or the function trying to do the
indexing? So we'd need a prefix specific to indexing: and that's just
too ugly for words.
As I said, use subset() or with(). For subset selection, subset() works
very nicely. (I don't like the way it does column selection, but that's
a different argument.)
Duncan Murdoch
More information about the R-help
mailing list