R: Por que a abordagem [[]] para subconjuntos de uma lista é mais rápida do que usar $?
Eu tenho trabalhado em alguns projetos que me obrigaram a fazer um monte de subconjuntos de listas e, ao criar o código, percebi que a abordagem do objeto [["nameHere"]] às listas de subconjuntos era geralmente mais rápida que a abordagem $ nameHere do objeto.
Como exemplo, se criarmos uma lista com componentes nomeados:
a.long.list <- as.list(rep(1:1000))
names(a.long.list) <- paste0("something",1:1000)
Por que é isso:
system.time (
for (i in 1:10000) {
a.long.list[["something997"]]
}
)
user system elapsed
0.15 0.00 0.16
mais rápido que isso:
system.time (
for (i in 1:10000) {
a.long.list$something997
}
)
user system elapsed
0.23 0.00 0.23
Minha pergunta é simplesmente se esse comportamento é verdadeiro universalmente e eu deveria evitar o subconjunto de $ sempre que possível ou a escolha mais eficiente depende de alguns outros fatores?