[Rd] Assignment of individual values to data frame columns: intentional or unintentional behavior?
Peter Ehlers
ehlers at ucalgary.ca
Thu Sep 2 16:45:06 CEST 2010
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
More information about the R-devel
mailing list