What is the meaning of the dollar sign "$" in R function()?

The $ allows you extract elements by name from a named list. For example

x <- list(a=1, b=2, c=3)
x$b
# [1] 2

You can find the names of a list using names()

names(x)
# [1] "a" "b" "c"

This is a basic extraction operator. You can view the corresponding help page by typing ?Extract in R.


There are four forms of the extract operator in R: [, [[, $, and @. The fourth form is also known as the slot operator, and is used to extract content from objects built with the S4 object system, also known as a formally defined object in R. Most beginning R users don't work with formally defined objects, so we won't discuss the slot operator here.

The first form, [, can be used to extract content from vectors, lists, or data frames.

The second and third forms, [[ and $, extract content from a single object.

The $ operator uses a name to perform the extraction as in anObject$aName. Therefore it enables one to extract items from a list based on their names. Since a data.frame() is also a list(), it's particularly well suited for accessing columns in a data frame. That said, this form does not work with a computed index, or variable substitution in a function.

Similarly, one can use the [ or [[ forms to extract a named item from an object, such as anObject["namedItem"] or anObject[["namedItem"]].

For more details and examples using each of the forms of the operator, please read my article Forms of the Extract Operator.

Accessing names in an S3 object

Daniel's post includes code for an R object, open.account(). As specified, this object is based on the S3 object system, where the behaviors of an object are defined as items within a list().

The code creates three functions within the list(), deposit, withdraw, and balance. Since each function is assigned a name, the functions within open.account() can be listed with the names() function, as illustrated below.

> names(open.account())
[1] "deposit"  "withdraw" "balance" 
>