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!
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.
You will often want to select an entire column, namely one specific variable from a data frame. If you want to select all elements of the variable diameter, for example, both of these will do the trick: dataframe_name[,colomn_position] dataframe_name[,"colomn_name"]
however, there is a short-cut. If your columns have names, you can use the $ sign:
dataframe_name$colomn_name
来源:https://stackoverflow.com/questions/42560090/what-is-the-meaning-of-the-dollar-sign-in-r-function