rbind de données.cadres sans noms

Je suis à essayer de comprendre pourquoi le rbind ne fonctionne pas comme prévu lors de l'assemblage des données.cadres sans noms.
Voici mes tests:

test <- data.frame(
            id=rep(c("a","b"),each=3),
            time=rep(1:3,2),
            black=1:6,
            white=1:6,
            stringsAsFactors=FALSE
            )

# take some subsets with different names
pt1 <- test[,c(1,2,3)]
pt2 <- test[,c(1,2,4)]

# method 1 - rename to same names - works
names(pt2) <- names(pt1)
rbind(pt1,pt2)

# method 2 - works - even with duplicate names
names(pt1) <- letters[c(1,1,1)]
names(pt2) <- letters[c(1,1,1)]
rbind(pt1,pt2)

# method 3 - works  - with a vector of NA's as names
names(pt1) <- rep(NA,ncol(pt1))
names(pt2) <- rep(NA,ncol(pt2))
rbind(pt1,pt2)

# method 4 - but... does not work without names at all?
pt1 <- unname(pt1)
pt2 <- unname(pt2)
rbind(pt1,pt2)

Cela semble un peu étrange pour moi. Ai-je raté une bonne raison pourquoi elle ne devrait pas travailler hors de la boîte?

modifier pour plus d'info

À l'aide de @JoshO Brien suggestion à debug, je peux identifier l'erreur comme se produisant au cours de cette if déclaration de la part de la rbind.data.frame fonction

if (is.null(pi) || is.na(jj <- pi[[j]]))

(version en ligne de code ici: http://svn.r-project.org/R/trunk/src/library/base/R/dataframe.R à partir de: "### Ici sont les méthodes pour rbind et cbind.")

De progression dans le programme, la valeur de pi ne semble pas avoir été défini à ce stade, d'où le programme tente d'indexer la constante intégrée pi comme pi[[3]] et erreurs.

De ce que je peux comprendre, de l'intérieur pi objet ne semble pas être en raison de cette ancienne ligne où clabs a été initialisé comme NULL:

if (is.null(clabs)) clabs <- names(xi) else { #pi gets set here

Je suis dans un enchevêtrement d'essayer de comprendre cela, mais sera mise à jour comme il vient.

  • Avoir un coup d'oeil au code de rbind.data.frame plus qui est concerné par la vérification et la corrélation de ligne et de colonne nom. Vous pourriez faire debug(rbind.data.frame) et puis, étape par le biais de la méthode 4 pour déterminer exactement où l'erreur est lancée.
  • ont mis à jour pour fournir quelques infos. Je ne suis pas si grande à l'interprétation du code et travaille à cela, mais peut-être qu'il sera évident pour quelqu'un d'autre.
InformationsquelleAutor thelatemail | 2012-11-28