6
votes

Comment combiner des vecteurs avec une longueur différente dans une liste dans R?

J'ai un problème lorsque vous combinez les vecteurs suivants inclus dans la liste: xxx

qui donne la liste suivante: xxx

combinant les utilisez la fonction do.call: y <- do.call (cbind, x)

donne: xxx

pendant que je voudrais obtenir ceci: xxx


0 commentaires

3 Réponses :


5
votes

Vous devez donner un peu plus d'aide, en préparant d'abord les vecteurs particuliers, tout de même longueur que vous souhaitez éventuellement cbind ensemble. Sinon (comme vous l'avez vu), r utilise ses règles de recyclage habituelles pour remplir la matrice.

Essayez quelque chose comme ceci: xxx

edit : Comme Brian mentionne dans les commentaires, cela pourrait être fait un peu plus compact (mais à la dépense d'une certaine lisibilité). Lequel que vous utilisez est juste une question de goût: xxx


5 commentaires

Pourrait en ligne l'affectation x2 et la simplifier comme do.call (cbind, acadrable (x, '[', spp))


J'ai rompu la mission et j'ai rendu la définition amusante plus explicite pour la clarté, car je pense qu'il est juste de conclure que le point de vue est un nouveau nouveau. Mais oui, cela pourrait tous être fait dans une seule ligne. En fait, je pourrais aussi bien ajouter cela comme une modification rapide. Merci.


@Briandiggs - pas de problème. Ce fut une bonne suggestion et un exemple simple comme celui-ci est le meilleur type d'endroit pour introduire ces deux techniques. Merci encore.


Super! Merci les gars. Les deux options sont intéressantes, le premier à comprendre l'astuce, le second à inclure dans mon analyse de temps-consommation. Merci encore!


@Julien - Comme cela a aidé, vous pouvez "accepter" la réponse en cliquant sur la coche à sa gauche. Merci.



5
votes

On dirait que vous essayez réellement de faire une fusion. En tant que tel, fusionner code> fonctionnera. Il vous suffit de le dire de fusionner sur les noms et de garder toutes les lignes.

do.call(merge, c(x, by=0, all=TRUE))   # by=0 and by="row.names" are the same


0 commentaires

1
votes
merge(x = x[[1]], y = x[[2]], by = "names", all.y = TRUE)

1 commentaires

Bonjour et bienvenue à. C'est une très bonne pratique pour ajouter une petite explication au code uniquement des réponses.