On 6/17/2011 2:24 PM, (Ted Harding) wrote:
And the extra twist in the tale is exemplified by this
mini-version of Albert-Jan's first example:

   DF<- data.frame(A=c(1,2,3))
   DF$B<- c(4,5,6)
   DF$C<- c(7,8,9)
   DF
   #   A B C
   # 1 1 4 7
   # 2 2 5 8
   # 3 3 6 9

   DF$D<- DF["A"]/DF["B"]
   DF
   #   A B C    A
   # 1 1 4 7 0.25
   # 2 2 5 8 0.40
   # 3 3 6 9 0.50

##And why:

   DF["A"]/DF["B"]
   #      A
   # 1 0.25
   # 2 0.40
   # 3 0.50

##So the ratio DF["A"]/DF["B"] comes out with the name of
##the numerator, "A". This is then the name given to DF$D

It's even slightly weirder than that:

str(DF)
#'data.frame':   3 obs. of  4 variables:
# $ A: num  1 2 3
# $ B: num  4 5 6
# $ C: num  7 8 9
# $ D:'data.frame':      3 obs. of  1 variable:
#  ..$ A: num  0.25 0.4 0.5

There is a column D in DF which is itself a data frame with a single column whose name is A (because of what Ted said). When formatted for printing out, the column name of the inner data frame is used (as a result of how data.frame() itself handles named arguments when the argument is itself a data.frame: "If a list or data frame or matrix is passed to data.frame it is as if each component or column had been passed as a separate argument...").

So not a bug, but a convoluted set of circumstances that can happen when non-atomic vectors are assigned to columns of a data.frame. That's one of those /you shouldn't do that even though it is technically legal or at least you shouldn't be surprised when things don't work the way you thought they would/ things.

Thus Albert-Jan's
   df["weight"] / ave(df["weight"], df["sex"], FUN=sum)*100
comes through with name "weight".

Ted.


On 17-Jun-11 21:06:42, William Dunlap wrote:
df$varname is a column of df.

df["varname"] is a one-column df containing that column.

df[["varname"]] is a column of df (same as df$varname).

df[,"varname"] is a column of df (same as df$varname).

df[,"varname",drop=FALSE] is a one-column df (same as df$varname).

df$newVarname<- df["varname"] inserts a new component
into df, the component being a one-column data.frame,
not the column in that data.frame.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com

-----Original Message-----
From: r-help-boun...@r-project.org
[mailto:r-help-boun...@r-project.org] On Behalf Of Albert-Jan Roskam
Sent: Friday, June 17, 2011 1:49 PM
To: R Mailing List
Subject: [R] is this a bug?

Hello,

Is the following a bug? I always thought that df$varname<-
does the same as
df["varname"]<-

df<- data.frame(weight=round(runif(10, 10, 100)),
sex=round(runif(100, 0,
1)))
df$pct<- df["weight"] / ave(df["weight"], df["sex"], FUN=sum)*100
names(df)
[1] "weight" "sex"    "pct"     ### ---------->  ok
head(df)
   weight sex    weight  ### ---------->  huh!?!
1     86   0 2.4002233
2     19   1 0.5643006
3     32   0 0.8931063
4     87   0 2.4281328
5     45   0 1.2559308
6     95   0 2.6514094
rm(df)
df<- data.frame(weight=round(runif(10, 10, 100)),
sex=round(runif(100, 0,
1)))
df["pct"]<- df["weight"] / ave(df["weight"], df["sex"],
FUN=sum)*100 ###
----->  this does work
names(df)
[1] "weight" "sex"    "pct"
head(df)
   weight sex       pct
1     15   0 0.5246590
2     43   0 1.5040224
3     17   1 0.9284544
4     44   1 2.4030584
5     76   1 4.1507373
6     59   0 2.0636586
do.call(c, R.Version())
                        platform                            arch
             "i686-pc-linux-gnu"                          "i686"
                              os                          system
                     "linux-gnu"               "i686, linux-gnu"
                          status                           major
                              ""                             "2"
                           minor                            year
                          "11.1"                          "2010"
                           month                             day
                            "05"                            "31"
                         svn rev                        language
                         "52157"                             "R"
                  version.string
"R version 2.11.1 (2010-05-31)"
# Thanks!

Cheers!!
Albert-Jan


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All right, but apart from the sanitation, the medicine,
education, wine, public
order, irrigation, roads, a fresh water system, and public
health, what have the
Romans ever done for us?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

--------------------------------------------------------------------
E-Mail: (Ted Harding)<ted.hard...@wlandres.net>
Fax-to-email: +44 (0)870 094 0861
Date: 17-Jun-11                                       Time: 22:24:41
------------------------------ XFMail ------------------------------



--
Brian S. Diggs, PhD
Senior Research Associate, Department of Surgery
Oregon Health & Science University

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to