R: ¿Por qué el enfoque [[]] para subordinar una lista es más rápido que usar $?

He estado trabajando en algunos proyectos que me han exigido realizar muchos subconjuntos de listas y, al perfilar el código, me di cuenta de que el enfoque del objeto [["nameHere"]] a las listas de subconjuntos era generalmente más rápido que el enfoque del objeto $ nameHere.

Como ejemplo si creamos una lista con componentes nombrados:

a.long.list <- as.list(rep(1:1000))
names(a.long.list) <- paste0("something",1:1000)

Por qué es esto:

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


user  system elapsed 
0.15    0.00    0.16 

más rápido que esto:

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

user  system elapsed 
0.23    0.00    0.23 

Mi pregunta es simplemente si este comportamiento es verdadero universalmente y debo evitar el subconjunto $ siempre que sea posible o si la elección más eficiente depende de otros factores.

Respuestas a la pregunta(1)

Su respuesta a la pregunta