Assignment of individual values to data frame columns: intentional or unintentional behavior?
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