Skip to content

Assignment of individual values to data frame columns: intentional or unintentional behavior?

4 messages · Ulrike Grömping, Gabor Grothendieck, Michael Lachmann

#
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:

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

Best, Ulrike
#
On Thu, Aug 5, 2010 at 12:24 PM, Ulrike Gr?mping
<groemping at bht-berlin.de> wrote:
Note that the lack of partial matching when performing assignment is
also documented.

See second last paragraph in Details section of ?Extract
#
Gabor Grothendieck schrieb:
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
#
Ulrike Gr?mping wrote:
I totally agree! I think that 
sw <- data.frame(Fertility=1:5)
sw$Fert[1] <- 10

should work either like

sw$Fert2[1] <- 10

i.e. create new column, containing just 10.
or like

sw$Fertility[1] <- 10

i.e. replace the 1st item in sw$Fertility by 10.