Если у меня есть список R mylist
, вы можете добавить к нему элемент obj
так:
mylist[[length(mylist)+1]] <- obj
Но, конечно, есть еще более компактный способ. Когда я был новым в R, я пробовал писать lappend()
следующим образом:
lappend <- function(lst, obj) {
lst[[length(lst)+1]] <- obj
return(lst)
}
но, конечно, это не работает из-за семантики R по имени (lst
эффективно копируется при вызове, поэтому изменения в lst
не видны за пределами lappend()
. Я знаю вас может взломать среду в R-функции, чтобы выйти за пределы вашей функции и мутировать вызывающую среду, но это похоже на большой молот, чтобы написать простую функцию append.
Может ли кто-нибудь предложить более красивый способ сделать это? Бонусные очки, если он работает как для векторов, так и для списков.