Wat is de betekenis van het dollarteken “$” in R-functie()?

Door Rte leren, kwam ik zojuist de volgende code tegen, uitgelegd hier.

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)

Wat is mijn grootste interesse in deze code, het gebruik van het "$"dollarteken dat verwijst naar een specifieke internal functionin open.account()functie. Ik bedoel dit deel :

   ross$withdraw(30)
    ross$balance()
    robert$balance()
    ross$deposit(50)
    ross$balance()
    ross$withdraw(500)

Vragen:

1- Wat is de betekenis van het dollarteken "$"in Rfunction()?
2- Hoe identificeerzijn attributen in functies, speciaal voor de functies die je overneemt van andere (d.w.z.je hebt het niet geschreven)?
Ik heb het volgende script gebruikt

> grep("$", open.account())
[1] 1 2 3

Maar het is niet nuttig ik wil een manier vinden om de naam (en) van interne functies te extraheren die door “$” kunnen worden verwijzen zonder alleen door te bellen en de geschreven code te zoeken als > open.account().
Bijvoorbeeld in het geval van open.account()Ik zou graag zien dat zoiets als volgt is:

$deposit
$withdraw
$balance

3- Is er een referentie waar ik er meer over kan lezen?
TNX!


Antwoord 1, Autoriteit 100%

De $Hiermee kunt u elementen op naam uit een genoemde lijst extraheren. Bijvoorbeeld

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

U kunt de namen van een lijst vinden met names()

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

Dit is een basisexploitant. U kunt de bijbehorende Help-pagina bekijken door ?Extractin R.


Antwoord 2, Autoriteit 64%

Er zijn vier vormen van de Extract-operator in R: [, [[, $, EN @. Het vierde formulier is ook bekend als de slotexploitant en wordt gebruikt om inhoud uit objecten uit te halen die zijn gebouwd met het S4-objectsysteem, ook bekend als een formeel gedefinieerd object in R. De meeste begonnen gebruikers Werk met formeel gedefinieerde objecten, dus we zullen de slot-operator hier niet bespreken.

Het eerste formulier, [, kan worden gebruikt om inhoud uit vectoren, lijsten of datakaders te extraheren.

De tweede en derde formulieren, [[en $, extraheer inhoud van een enkel object.

De operator $gebruikt een naam om de extractie uit te voeren zoals in anObject$aName. Daarom stelt het iemand in staat om items uit een lijst te halen op basis van hun naam. Aangezien een data.frame()ook een list()is, is het bijzonder geschikt voor toegang tot kolommen in een dataframe. Dat gezegd hebbende, deze vorm werkt niet met een berekende index of variabele substitutie in een functie.

Evenzo kan men de formulieren [of [[>gebruiken om een benoemd item uit een object te extraheren, zoals anObject["namedItem"]of anObject[["namedItem"]].

Voor meer details en voorbeelden van het gebruik van elk van de vormen van de operator, lees mijn artikel Formulieren van de extractieoperator.

Toegang tot namen in een S3-object

Daniels post bevat code voor een R-object, open.account(). Zoals aangegeven, is dit object gebaseerd op het S3-objectsysteem, waarbij het gedrag van een object wordt gedefinieerd als items binnen een list().

De code creëert drie functies binnen de list(), deposit, withdrawen balance. Aangezien aan elke functie een naam is toegewezen, kunnen de functies binnen open.account()worden weergegeven met de functie names(), zoals hieronder geïllustreerd.

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

Other episodes