I've been working on a few projects that have required me to do a lot of list subsetting and while profiling code I realised that the object[["nameHere"]] approach to subsetting lists was usually faster than the object$nameHere approach.
As an example if we create a list with named components:
a.long.list <- as.list(rep(1:1000))
names(a.long.list) <- paste0("something",1:1000)
Why is this:
system.time (
for (i in 1:10000) {
a.long.list[["something997"]]
}
)
user system elapsed
0.15 0.00 0.16
faster than this:
system.time (
for (i in 1:10000) {
a.long.list$something997
}
)
user system elapsed
0.23 0.00 0.23
My question is simply whether this behaviour is true universally and I should avoid the $ subset wherever possible or does the most efficient choice depend on some other factors?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…