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
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.