相关疑难解决方法(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中覆盖具有相同名称的值时组合列表

我有两个带有命名元素的列表:

a <- list(a=1, b=2)
b <- list(b=3, c=4)
Run Code Online (Sandbox Code Playgroud)

我想组合这些列表,以便具有相同名称的任何元素都将被列表b覆盖,所以我得到了这个:

list(a=1, b=3, c=4)
Run Code Online (Sandbox Code Playgroud)

我知道我可以循环执行此操作,但是在R中有更简洁的方法吗?

r

21
推荐指数
2
解决办法
6114
查看次数

R:在 tryCatch 的循环中添加元素到列表

我正在尝试解析数据帧列中包含的 JSON,其中一些已损坏。作为第一步,我想识别损坏的行,并使用它来对数据帧进行子集化。

我正在使用这篇文章中的技巧来c()填充列表(尽管我知道它很慢):

myRows <- c()
for (i in 1:nrow(myDataframe)) {
  tryCatch({myDataframe$myJSONstring[i] %>%
    fromJSON() %>%
    length()},
    error = function(e) {print(i); myRows <- c(myRows, i)})
}
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用。print(i)工作正常,但运行循环后myRows仍然只是一个空列表。tryCatch 的错误位中可以运行的代码是否有一些限制?

loops r list try-catch

3
推荐指数
1
解决办法
829
查看次数

标签 统计

r ×3

list ×2

append ×1

big-o ×1

loops ×1

performance ×1

try-catch ×1