 <p>R is very LisP-like. The symbol <code>[</code> is actually a function. When you write <code>mylist[1]</code>, what is actually happening "under the hood" is that items (only one in this instance) inside the flanking square brackets are extracted and passed to the <code>[</code> function as second and possibly third arguments, along with 'mylist` as the first object, so it becomes:</p> <pre><code> `[`(mylist, 1) # that will also succeed if you type it at the command line </code></pre> <p>Both <code>sapply</code> and <code>lapply</code> have a trailing triple-dots argument. So the series of items being passed to <code>[</code> as it first arguments are just the values inside <code>fileNameSplit</code>'s sublists and the <code>1</code> is being recycled as a second argument, and you therefore get the first item in each of those sublists. It's a series of calls like:</p> <pre><code> `[`(mylist[[1]], 1) # as the first one with 2,3, ... in the [[.]] for succeeding calls </code></pre> <p>Because you used <code>sapply</code> the value gets passed to simplify2array and comes back to you as a vector-result, instead of the list that would have been returned had you just used <code>lapply</code>.</p>