[Rd] "Name partially matched in data frame"

Scott Kostyshak skostysh at princeton.edu
Wed Apr 30 21:36:02 CEST 2014


On Wed, Apr 30, 2014 at 3:33 PM, Scott Kostyshak <skostysh at princeton.edu> wrote:
> Hi Dennis,
>
> On Wed, Apr 30, 2014 at 3:03 PM, Fisher Dennis <fisher at plessthan.com> wrote:
>> R 3.1.0
>> OS X
>>
>> Colleagues,
>>
>> I recently updated to 3.1.0 and I have encountered
>>         Warning messages: ...  Name partially matched in data frame
>> when I do something like:
>>         DATAFRAME$colname
>> where colname is actually something longer than that (but unambiguous).
>>
>> I have much appreciated the partial matching capabilities because it fits with my workflow.  I often receive updated data months after the initial code is written.  In order to keep track of what I did in the past, I provide lengthy (unambiguous) names for columns, then abbreviate the names as I call them.  This behavior has been termed “lazy” in various correspondence on this mailing list but it works for me and probably works for others.
>
> Why not store that information elsewhere? e.g. in an attribute?
>
>> I realize that the new message is only a warning but it is a minor nuisance.  Would it be possible to add an
>>         option(partialMatch=TRUE)       ## default is FALSE
>> or something similar to suppress that behavior?  That should keep both camps happy.
>
> There is currently no option to control that behavior and (although I
> do understand your use case) I personally hope one is not implemented.
> The reason is that you might put that option in your .Rprofile and
> when you share your code with me I get errors that columns aren't
> found.

Let me change this to "I would get warnings, which would make me worried."

> You can of course redefine the `$`:
>
>> dataf <- data.frame(longColumn = 5)
>> dataf$long
> [1] 5
> Warning message:
> In `$.data.frame`(dataf, long) : Name partially matched in data frame
>>
>> `$.data.frame` <-
> + function (x, name)
> + {
> +     a <- x[[name]]
> +     if (!is.null(a))
> +         return(a)
> +     a <- x[[name, exact = FALSE]]
> +     return(a)
> + }
>>
>> dataf$long
> [1] 5
>>
>
> I hope you don't do that though.
>
> Another option is to use the more verbose dataf[["long", exact = FALSE]].
>
> Scott
>
>
> --
> Scott Kostyshak
> Economics PhD Candidate
> Princeton University

Scott


--
Scott Kostyshak
Economics PhD Candidate
Princeton University



More information about the R-devel mailing list