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

让人想犯罪 __ 提交于 2019-11-27 03:11:50

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!