Through learning R
, I just came across the following code explained here.
open.account <- function(total) { list( deposit = function(amount) { if(amount <= 0) stop("Deposits must be positive!\n") total <<- total + amount cat(amount, "deposited. Your balance is", total, "\n\n") }, withdraw = function(amount) { if(amount > total) stop("You don't have that much money!\n") total <<- total - amount cat(amount, "withdrawn. Your balance is", total, "\n\n") }, balance = function() { cat("Your balance is", total, "\n\n") } ) } ross <- open.account(100) robert <- open.account(200) ross$withdraw(30) ross$balance() robert$balance() ross$deposit(50) ross$balance() ross$withdraw(500)
What is the most of my interest about this code, learning the use of "$"
dollar sign which refer to an specific internal function
in open.account()
function. I mean this part :
ross$withdraw(30) ross$balance() robert$balance() ross$deposit(50) ross$balance() ross$withdraw(500)
Questions:
1- What is the meaning of the dollar sign "$"
in R
function()
?
2- How to identify its attributes in functions, specially for the functions that you adopting from other (i.e. you did not write it)?
I used the following script
> grep("$", open.account()) [1] 1 2 3
but it is not useful I want to find a way to extract the name(s) of internal functions that can be refer by "$" without just by calling and searching the written code as > open.account()
.
For instance in case of open.account()
I'd like to see something like this:
$deposit $withdraw $balance
3- Is there any reference that I can read more about it?
tnx!
Generally speaking, the $ operator is used to extract or subset a specific part of a data object in R. For instance, this can be a data frame object or a list. In this example, I'll explain how to extract the values in a data frame columns using the $ operator.
What does $ do in R? The $ operator can be used to select a variable/column, to assign new values to a variable/column, or to add a new variable/column in an R object. This R operator can be used on e.g. lists, and dataframes.
When used in a regular expression, the dollar sign is used to represent the end of the line or string. For example, in the following Perl code, if the user's input stored in the $input variable ends with the "example," it would print "I see example." to the screen.
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.
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" >
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With