小编Jon*_*n M的帖子

R:为什么[[]]方法比使用$更快地对列表进行子集化?

我一直在研究一些项目,这些项目要求我做很多列表子集,而在分析代码时,我意识到对象[["nameHere"]]方法对子集化列表的方法通常比对象$ nameHere方法更快.

例如,如果我们创建一个包含命名组件的列表:

a.long.list <- as.list(rep(1:1000))
names(a.long.list) <- paste0("something",1:1000)
Run Code Online (Sandbox Code Playgroud)

为什么是这样:

system.time (
for (i in 1:10000) {
    a.long.list[["something997"]]
}
)


user  system elapsed 
0.15    0.00    0.16 
Run Code Online (Sandbox Code Playgroud)

比这更快:

system.time (
    for (i in 1:10000) {
        a.long.list$something997
    }
)

user  system elapsed 
0.23    0.00    0.23 
Run Code Online (Sandbox Code Playgroud)

我的问题是这种行为是否真的普遍存在,我应尽可能避免使用$ subset,还是最有效的选择取决于其他一些因素?

performance r list subset

42
推荐指数
1
解决办法
1034
查看次数

是否有更有效的方法在列表中用NA替换NULL?

我经常遇到这样的结构数据:

employees <- list(
    list(id = 1,
             dept = "IT",
             age = 29,
             sportsteam = "softball"),
    list(id = 2,
             dept = "IT",
             age = 30,
             sportsteam = NULL),
    list(id = 3,
             dept = "IT",
             age = 29,
             sportsteam = "hockey"),
    list(id = 4,
             dept = NULL,
             age = 29,
             sportsteam = "softball"))
Run Code Online (Sandbox Code Playgroud)

在许多情况下,此类列表可能长达数千万个项目,因此内存问题和效率始终是一个问题.

我想将列表转换为数据帧,但如果我运行:

library(data.table)
employee.df <- rbindlist(employees)
Run Code Online (Sandbox Code Playgroud)

由于NULL值,我得到错误.我的正常策略是使用如下函数:

nullToNA <- function(x) {
    x[sapply(x, is.null)] <- NA
    return(x)
}
Run Code Online (Sandbox Code Playgroud)

然后:

employees <- lapply(employees, nullToNA)
employee.df <- rbindlist(employees)
Run Code Online (Sandbox Code Playgroud)

返回

   id dept …
Run Code Online (Sandbox Code Playgroud)

performance null r list

32
推荐指数
3
解决办法
2万
查看次数

保存 S4 课程的最简单方法

可能是这里可以想象的关于 S4 课程的最基本问题。

保存您定义的 S4 类以便您可以在其他地方重用它的最简单方法是什么。我有一个项目,我正在获取一些非常大的数据集并将它们的摘要信息编译成小的 S4 对象。由于我将因此切换 R 会话来为每个数据集创建摘要对象,因此最好能够从保存的对象加载类的定义(或让它自动加载),而不必包含每个脚本顶部的对象的长定义(我认为这是不好的做法,因为定义对象的代码可能会变得不一致)。

那么 saveclass("myClass"), loadclass("myclass") 的语法是什么,还是我只是以错误的方式思考这个问题?

r class save s4

5
推荐指数
1
解决办法
3172
查看次数

使用调查权重时,如何为logit模型生成边际效应?

我通常使用mfx包和logitmfx函数生成logit模型边际效应.然而,我目前使用的调查具有权重(由于某些人群中的过采样,其对样本中DV的比例具有很大影响)并且logitmfx似乎没有任何方式来包括权重.

我用svyglm为模型拟合如下:

library(survey)

survey.design <- svydesign(ids = combined.survey$id,
                                        weights = combined.survey$weight,
                                            data = combined.survey)

vote.pred.1 <- svyglm(formula = turnout ~ gender + age.group + 
                                    education + income, 
                                 design = survey.design)
summary(vote.pred.1)
Run Code Online (Sandbox Code Playgroud)

如何从这些结果中产生边际效应?

r survey weighting glm marginal-effects

5
推荐指数
1
解决办法
1658
查看次数

标签 统计

r ×4

list ×2

performance ×2

class ×1

glm ×1

marginal-effects ×1

null ×1

s4 ×1

save ×1

subset ×1

survey ×1

weighting ×1