Hi, I am using R 1.9.1 on on i686 PC with SuSE Linux 9.0. I have a data.frame, e.g.:> myData <- data.frame( var1 = c( 1:4 ), var2 = c (5:8 ) )If I add a new column by> myData$var3 <- myData[ , "var1" ] + myData[ , "var2" ]everything is fine, but if I omit the commas:> myData$var4 <- myData[ "var1" ] + myData[ "var2" ]the name shown above the 4th column is not "var4":> myDatavar1 var2 var3 var1 1 1 5 6 6 2 2 6 8 8 3 3 7 10 10 4 4 8 12 12 but names() and colnames() return the expected name:> names( myData )[1] "var1" "var2" "var3" "var4"> colnames( myData )[1] "var1" "var2" "var3" "var4" And it is even worse: I am not able to change the name shown above the 4th column:> names( myData )[ 4 ] <- "var5" > myDatavar1 var2 var3 var1 1 1 5 6 6 2 2 6 8 8 3 3 7 10 10 4 4 8 12 12 I guess that this is a bug, isn't it? Arne
Arne Henningsen wrote:> Hi, > > I am using R 1.9.1 on on i686 PC with SuSE Linux 9.0. > > I have a data.frame, e.g.: > > >>myData <- data.frame( var1 = c( 1:4 ), var2 = c (5:8 ) ) > > > If I add a new column by > > >>myData$var3 <- myData[ , "var1" ] + myData[ , "var2" ] > > > everything is fine, but if I omit the commas: > > >>myData$var4 <- myData[ "var1" ] + myData[ "var2" ]This bug is the user ... ;-) Type: str(myData) `data.frame': 4 obs. of 3 variables: $ var1: int 1 2 3 4 $ var2: int 5 6 7 8 $ var4:`data.frame': 4 obs. of 1 variable: ..$ var1: int 6 8 10 12 Aha! You have created a data.frame consisting of one column! What you mean really mean is myData$var5 <- myData[[ "var1" ]] + myData[[ "var2" ]] Uwe Ligges> > the name shown above the 4th column is not "var4": > > >>myData > > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > but names() and colnames() return the expected name: > > >>names( myData ) > > [1] "var1" "var2" "var3" "var4" > >>colnames( myData ) > > [1] "var1" "var2" "var3" "var4" > > And it is even worse: I am not able to change the name shown above the 4th > column: > >>names( myData )[ 4 ] <- "var5" >>myData > > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > I guess that this is a bug, isn't it? > > Arne > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Arne Henningsen <ahenningsen at email.uni-kiel.de> writes:> Hi, > > I am using R 1.9.1 on on i686 PC with SuSE Linux 9.0. > > I have a data.frame, e.g.: > > > myData <- data.frame( var1 = c( 1:4 ), var2 = c (5:8 ) ) > > If I add a new column by > > > myData$var3 <- myData[ , "var1" ] + myData[ , "var2" ] > > everything is fine, but if I omit the commas: > > > myData$var4 <- myData[ "var1" ] + myData[ "var2" ] > > the name shown above the 4th column is not "var4": > > > myData > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > but names() and colnames() return the expected name: > > > names( myData ) > [1] "var1" "var2" "var3" "var4" > > colnames( myData ) > [1] "var1" "var2" "var3" "var4" > > And it is even worse: I am not able to change the name shown above the 4th > column: > > names( myData )[ 4 ] <- "var5" > > myData > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > I guess that this is a bug, isn't it?Nope:> str(myData)`data.frame': 4 obs. of 4 variables: $ var1: int 1 2 3 4 $ var2: int 5 6 7 8 $ var3: int 6 8 10 12 $ var4:`data.frame': 4 obs. of 1 variable: ..$ var1: int 6 8 10 12 It's slightly peculiar, but if a column of a data frame is itself a rectangular structure (data frame or matrix), then the "innermost" names are used. Cf.> myData[,"var4"] <- cbind(xyzzy=5:2) > myDatavar1 var2 var3 xyzzy 1 1 5 6 5 2 2 6 8 4 3 3 7 10 3 4 4 8 12 2 Arguably, one might prefer var1 var2 var3 var4 xyzzy 1 1 5 6 5 2 2 6 8 4 3 3 7 10 3 4 4 8 12 2 or something like that, but it's hardly a bug. -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
This is not a bug, and BTW data frames have names not colnames. As I have said already today, don't confuse the printed repesentation of an object with the object itself. On Tue, 17 Aug 2004, Arne Henningsen wrote:> I am using R 1.9.1 on on i686 PC with SuSE Linux 9.0. > > I have a data.frame, e.g.: > > > myData <- data.frame( var1 = c( 1:4 ), var2 = c (5:8 ) ) > > If I add a new column by > > > myData$var3 <- myData[ , "var1" ] + myData[ , "var2" ] > > everything is fine, but if I omit the commas: > > > myData$var4 <- myData[ "var1" ] + myData[ "var2" ] > > the name shown above the 4th column is not "var4": > > > myData > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > but names() and colnames() return the expected name: > > > names( myData ) > [1] "var1" "var2" "var3" "var4" > > colnames( myData ) > [1] "var1" "var2" "var3" "var4" > > And it is even worse: I am not able to change the name shown above the 4th > column: > > names( myData )[ 4 ] <- "var5" > > myData > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > I guess that this is a bug, isn't it?No. Take a look at the fourth column more carefully.> myData[4]var1 1 6 2 8 3 10 4 12> class(myData[4])[1] "data.frame" You included a single-column data frame in your data frame. -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
On Tue, 2004-08-17 at 09:01, Arne Henningsen wrote:> Hi, > > I am using R 1.9.1 on on i686 PC with SuSE Linux 9.0. > > I have a data.frame, e.g.: > > > myData <- data.frame( var1 = c( 1:4 ), var2 = c (5:8 ) ) > > If I add a new column by > > > myData$var3 <- myData[ , "var1" ] + myData[ , "var2" ] > > everything is fine, but if I omit the commas: > > > myData$var4 <- myData[ "var1" ] + myData[ "var2" ] > > the name shown above the 4th column is not "var4": > > > myData > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > but names() and colnames() return the expected name: > > > names( myData ) > [1] "var1" "var2" "var3" "var4" > > colnames( myData ) > [1] "var1" "var2" "var3" "var4" > > And it is even worse: I am not able to change the name shown above the 4th > column: > > names( myData )[ 4 ] <- "var5" > > myData > var1 var2 var3 var1 > 1 1 5 6 6 > 2 2 6 8 8 > 3 3 7 10 10 > 4 4 8 12 12 > > I guess that this is a bug, isn't it? > > ArneHere is a hint: # This returns an integer vector> str(myData[ , "var1" ] + myData[ , "var2" ])int [1:4] 6 8 10 12 # This returns a data.frame> str(myData[ "var1" ] + myData[ "var2" ])`data.frame': 4 obs. of 1 variable: $ var1: int 6 8 10 12> str(myData)`data.frame': 4 obs. of 5 variables: $ var1: int 1 2 3 4 $ var2: int 5 6 7 8 $ var3: int 6 8 10 12 $ var4:`data.frame': 4 obs. of 1 variable: ..$ var1: int 6 8 10 12 Take a look at the details, value and coercion sections of ?.data.frame HTH, Marc Schwartz
On Tue, 2004-08-17 at 09:34, Marc Schwartz wrote:> Take a look at the details, value and coercion sections of > ?.data.frameThis must be my week for typos. That should be: ?[.data.frame (in ESS) or ?"[.data.frame" (otherwise) Marc