我一直在研究一些项目,这些项目要求我做很多列表子集,而在分析代码时,我意识到对象[["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,还是最有效的选择取决于其他一些因素?
我经常遇到这样的结构数据:
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) 可能是这里可以想象的关于 S4 课程的最基本问题。
保存您定义的 S4 类以便您可以在其他地方重用它的最简单方法是什么。我有一个项目,我正在获取一些非常大的数据集并将它们的摘要信息编译成小的 S4 对象。由于我将因此切换 R 会话来为每个数据集创建摘要对象,因此最好能够从保存的对象加载类的定义(或让它自动加载),而不必包含每个脚本顶部的对象的长定义(我认为这是不好的做法,因为定义对象的代码可能会变得不一致)。
那么 saveclass("myClass"), loadclass("myclass") 的语法是什么,还是我只是以错误的方式思考这个问题?
我通常使用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)
如何从这些结果中产生边际效应?