相关疑难解决方法(0)

将对象附加到R中的列表中,以分摊的常量时间O(1)?

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

mylist[[length(mylist)+1]] <- obj
Run Code Online (Sandbox Code Playgroud)

但肯定有一些更紧凑的方式.当我在R的新人时,我尝试这样写lappend():

lappend <- function(lst, obj) {
    lst[[length(lst)+1]] <- obj
    return(lst)
}
Run Code Online (Sandbox Code Playgroud)

但是当然由于R的逐个调用语义而无法正常工作(lst在调用时有效复制,所以更改lst在范围之外是不可见的lappend().我知道你可以在R函数中做环境黑客攻击到达外部你的函数范围和mutate调用环境,但这似乎是一个大锤子写一个简单的追加函数.

任何人都可以建议一个更美丽的方式吗?奖励点,如果它适用于矢量和列表.

performance big-o r list append

235
推荐指数
8
解决办法
30万
查看次数

我们再来一次:将一个元素附加到R中的列表中

对于在摊销的常数时间内将对象附加到R中的列表,我不满意

> list1 <- list("foo", pi)
> bar <- list("A", "B")
Run Code Online (Sandbox Code Playgroud)

我怎么能新元素追加barlist1?显然,c()不起作用,它变平bar:

> c(list1, bar)
[[1]]
[1] "foo"

[[2]]
[1] 3.141593

[[3]]
[1] "A"

[[4]]
[1] "B"
Run Code Online (Sandbox Code Playgroud)

索引作业的分配:

> list1[[length(list1)+1]] <- bar
> list1
[[1]]
[1] "foo"

[[2]]
[1] 3.141593

[[3]]
[[3]][[1]]
[1] "A"

[[3]][[2]]
[1] "B"
Run Code Online (Sandbox Code Playgroud)

这种方法的效率是多少?有更优雅的方式吗?

performance r list append

47
推荐指数
3
解决办法
7万
查看次数

标签 统计

append ×2

list ×2

performance ×2

r ×2

big-o ×1