问题
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!
回答1:
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.
回答2:
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.
回答3:
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