小编典典

在摊销常数时间内将对象附加到 R 中的列表,O(1)?

all

如果我有一些 R list ,您可以像这样mylist附加一个项目:obj

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

但肯定有一些更紧凑的方式。当我是 R 的新手时,我试着lappend()这样写:

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

但当然,由于 R
的按名称调用语义(lst在调用时有效复制,因此lstlappend().你的函数范围和改变调用环境,但这似乎是一个大锤子来编写一个简单的附加函数。

任何人都可以提出一种更漂亮的方法吗?如果它适用于向量和列表,则加分。


阅读 100

收藏
2022-05-20

共1个答案

小编典典

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

R> LL <- list(a="tom", b="dick")
R> c(LL, c="harry")
$a
[1] "tom"

$b
[1] "dick"

$c
[1] "harry"

R> class(LL)
[1] "list"
R>

这也适用于矢量,所以我可以获得奖励积分吗?

编辑(2015 年 2 月 1 日):
这篇文章将在其五岁生日时发布。一些善良的读者不断重复它的任何缺点,所以一定要看看下面的一些评论。一种list类型的建议:

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

一般来说,R 类型很难为所有类型和用途使用一个且只有一个习语。

2022-05-20