gpt4 book ai didi

r - 在摊余常数时间内将一个对象追加到 R 中的列表中,O(1)?

转载 作者:行者123 更新时间:2023-12-03 04:07:11 28 4
gpt4 key购买 nike

如果我有一些 R 列表 mylist,您可以向其中 append 一个项目 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 功能。

谁能建议一种更漂亮的方法来做到这一点?如果它同时适用于向量和列表,则奖励积分。

最佳答案

如果是字符串列表,只需使用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 类型很难为所有类型和用途使用一种且只有一种习惯用法。

关于r - 在摊余常数时间内将一个对象追加到 R 中的列表中,O(1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436688/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com