EDIT: The one-and-a-half line answer is that both lists and atomic vectors are types of vectors, and subset exactly the same way.
This answer expands on the difference between lists and atomic vectors.
The best explanation of R's data structures, specifically between lists and atomic vectors, is (in my opinion) Hadley Wickham's new book:
http://adv-r.had.co.nz/Data-structures.html
Both lists and atomic vectors are 1 dimensional data structures. However, atomic vectors are homogeneous and lists are heterogeneous. Lists can contain any type of vector, including other lists. Atomic vectors are flat on the other hand.
As far as subsetting using []
vs [[]]
, []
is preserving for both lists and atomic vectors, where as [[]]
is simplifying. Thus, []
and [[]]
are NOT the same, whether applied to lists OR atomic vectors. For example, [[]]
will simplify a named vector by removing the name; subsetting a named vector by []
will keep the name. For a list, [[]]
will pull out the contents of a list, and can return a number of simplified data structures. Subsetting a list by []
will always return a list (preserving).
Subsetting an atomic vector by [[]]
returns a length one atomic vector. Subsetting a list by [[]]
can return a number of different classes of data structures. This goes back to the fact that atomic vectors are homogeneous and lists are heterogeneous. However, according to Hadley, subsetting a list works exactly the same way as subsetting an atomic vector.
Take a look at this section of Hadley's book for further reference:
http://adv-r.had.co.nz/Subsetting.html#subsetting-operators