Skip to content
Back to formatted view

Raw Message

Message-ID: <4C7FB872.4050805@ucalgary.ca>
Date: 2010-09-02T14:45:06Z
From: Peter Ehlers
Subject: Assignment of individual values to data frame columns:	intentional or unintentional behavior?
In-Reply-To: <4C5AFFA3.7050800@bht-berlin.de>

On 2010-08-05 12:14, Ulrike Gr?mping wrote:
> Gabor Grothendieck schrieb:
>> On Thu, Aug 5, 2010 at 12:24 PM, Ulrike Gr?mping
>> <groemping at bht-berlin.de>  wrote:
>>
>>> Dear developeRs,
>>>
>>> I have just discovered a strange feature when assigning some values to
>>> columns of a data frame: The column is matched by partial matching (as
>>> documented), but when assigning a value, a new column with the partial name
>>> is added to the data frame that is identical to the original column except
>>> for the changed value. Is that intentional ? An example:
>>>
>>
>> Note that the lack of partial matching when performing assignment is
>> also documented.
>>
>> See second last paragraph in Details section of ?Extract
>>
> Yes, I see, thanks. I looked at ?"[.data.frame", where this is not
> documented.
>
> However, given the documentation that partial matching is not used on
> the left-hand side, I would have expected even more that the assignment
>
> sw$Fert[1]<- 10
>
> works differently, because I am using it on the left-hand side.
> Probably, extraction ([1]) is done first here, so that the right-hand
> side won. At least, this is very confusing.
>
> Best, Ulrike

This is another example of why it's a good idea to avoid
the '$' notation when fiddling with data frames. Try this:

  sw <- swiss[1:5, 1:4]
  sw[["Fert"]]
  sw[["Fert"]] <- 10

and my preferred version:
  sw[, "Fert"]
  sw[, "Fert"] <- 10

I've never liked partial matching for data frames.

   -Peter Ehlers