将对象附加到R中的一个列表中,以摊销固定时间O(1)?

如果我有一些R列表mylist,您可以像这样向其附加一个项目obj

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

但肯定有更紧凑的方式。当我刚到R时,我试着写lappend(),就像这样:

lappend<-功能(lst、obj){
lst[[长度(lst)+1]]<-obj
返回(lst)
}

但是当然,由于R的按名称调用语义(lst在调用时被有效地复制,因此对lst的更改在lappend()的范围之外是不可见的。我知道你可以在R函数中进行环境黑客攻击,以超出函数的范围并改变调用环境,但这对于编写简单的附加函数来说似乎是一个巨大的挑战

有人能推荐一种更漂亮的方法吗?如果它同时适用于向量和列表,则会获得额外的积分

如果是字符串列表,只需使用c()函数:

R>LL<-列表(a=“tom”,b=“dick”)
R>c(LL,c=“harry”)
一美元
[1] “汤姆”
b美元
[1] “迪克”
$c
[1] “哈利”
R>等级(LL)
[1] “列表”
R>

这也适用于向量,所以我能得到额外的分数吗

编辑(2015-2-01):这篇文章将在它的第五个生日到来。一些好心的读者不断重复它的任何缺点,所以无论如何也可以看到下面的一些评论。列表类型的一个建议:

newlist<-list(oldlist,list(someobj))

一般来说,R类型会使所有类型和用途都很难有一个且只有一个习惯用法

发表评论