hsiu-khuern.tang at hp.com
2007-Mar-14 17:58 UTC
[Rd] cannot delete the last column of a dataframe using "[<-" (PR#9565)
Hi, If df is a dataframe, its last column can't be deleted using "[<-", but other columns can be deleted this way. Example:> (df <- df0 <- data.frame(x = 1:3, y = 4:6, z = 7:9))x y z 1 1 4 7 2 2 5 8 3 3 6 9> df[, "z"] <- NULLError in x[[jj]] : subscript out of bounds> df[, 3] <- NULLError in x[[jj]] : subscript out of bounds> df["z"] <- NULLError in x[[jj]] : subscript out of bounds> df[3] <- NULLError in x[[jj]] : subscript out of bounds> df[, "y"] <- NULL > dfx z 1 1 7 2 2 8 3 3 9> df <- df0; df[, 2] <- NULL > df <- df0; df["y"] <- NULL > df <- df0; df[2] <- NULLDeleting using "$<-" and "[[<-" works for all columns. Is it wrong to use "[<-" for deleting? help("[<-.data.frame") has an example, but it doesn't work for deleting the last column either:> sw <- swiss[1:5, 1:4] # select a manageable subset> ## adding a column > sw["new1"] <- LETTERS[1:5] # adds a character column > sw[["new2"]] <- letters[1:5] # ditto > sw[, "new3"] <- LETTERS[1:5] # ditto > sw$new4 <- 1:5 > sw$new4 <- NULL # delete the column > (sw0 <- sw)Fertility Agriculture Examination Education new1 new2 new3 Courtelary 80.2 17.0 15 12 A a A Delemont 83.1 45.1 6 9 B b B Franches-Mnt 92.5 39.7 5 5 C c C Moutier 85.8 36.5 12 7 D d D Neuveville 76.9 43.5 17 15 E e E> # This works: > sw[6:8] <- list(letters[10:14], NULL, aa=1:5) # delete col7, update 6, append> # But this doesn't: > sw <- sw0 > sw[6:8] <- list(letters[10:14], aa=1:5, NULL)Error in x[[jj]] : subscript out of bounds Best, Hsiu-Khuern. ---------- Version: platform = i486-pc-linux-gnu arch = i486 os = linux-gnu system = i486, linux-gnu status = major = 2 minor = 4.1 year = 2006 month = 12 day = 18 svn rev = 40228 language = R version.string = R version 2.4.1 (2006-12-18) Locale: C Search Path: .GlobalEnv, package:datasets, package:stats, package:graphics, package:grDevices, package:utils, package:methods, Autoloads, package:base