From ehlers at ucalgary.ca  Thu Sep  2 16:45:06 2010
From: ehlers at ucalgary.ca (Peter Ehlers)
Date: Thu, 02 Sep 2010 08:45:06 -0600
Subject: [Rd] Assignment of individual values to data frame
 columns:	intentional or unintentional behavior?
In-Reply-To: <4C5AFFA3.7050800@bht-berlin.de>
References: <4C5AE5A9.9060905@bht-berlin.de>	<AANLkTimEyxOM-tevXE1FVDfYScqT-z3dNX9TEc8xez7P@mail.gmail.com>
	<4C5AFFA3.7050800@bht-berlin.de>
Message-ID: <4C7FB872.4050805@ucalgary.ca>

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



[Rd] Assignment of individual values to data frame columns: intentional or unintentional behavior?
Peter Ehlers