250 votes

Ajouter un objet à une liste de R en temps constant amorti ?

Si j'ai quelques R de liste mylist, vous pouvez ajouter un élément obj comme si:

mylist[[length(mylist)+1]] <- obj

Mais il y a sûrement certains de façon plus compacte. Quand j'étais nouveau à R, j'ai essayé d'écrire lappend() comme:

lappend <- function(lst, obj) {
    lst[[length(lst)+1]] <- obj
    return(lst)
}

mais bien sûr, cela ne fonctionne pas en raison de la R de l'appel par le nom de la sémantique (lst est effectivement copié lors de l'appel, de sorte que les modifications à l' lst ne sont pas visibles de l'extérieur de la portée de l' lappend(). Je sais que vous pouvez faire de l'environnement le piratage par une fonction R à l'extérieur de la portée de votre fonction et de la mutation de l'appelant de l'environnement, mais qui semble comme un gros marteau pour écrire un simple ajout de la fonction.

Quelqu'un peut-il suggérer une plus belle façon de le faire? Les points de Bonus si cela fonctionne pour les deux vecteurs et des listes.

259voto

Dirk Eddelbuettel Points 134700

Il suffit d’utiliser le `` fonction :

Cela fonctionne sur les vecteurs de trop, donc puis-je obtenir les points de bonus ?

17voto

Arseny Points 96

En Lisp nous fait de cette façon :

Cependant, il était « contre », pas juste « c ». Si vous avez besoin commencer avec une liste d’empy, utilisez l

7voto

Ken Williams Points 4686

Vous voulez quelque chose comme ceci peut-être ?

Il n’est pas une fonction très polie (assigner à `` est un peu grossier) mais IIUYC c’est ce que vous demandez pour.

5voto

ayman Points 770

Si vous passez dans la variable de la liste sous forme de chaîne entre guillemets, vous pouvez y arriver au sein de la fonction comme :

donc :

ou pour un crédit supplémentaire :

5voto

Paul Points 41

Vous ne savez pas pourquoi vous ne pensez pas que votre première méthode ne fonctionne pas. Vous avez un bug dans la fonction lappend : length(list) doit être length(lst). Cela fonctionne très bien et retourne une liste avec l’obj figurant en annexe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X