web-dev-qa-db-fra.com

Quelle est la signification du signe dollar "$" dans la fonction R ()?

En apprenant R, je viens de découvrir le code suivant expliqué ici .

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)

Ce qui est le plus de mon intérêt pour ce code, apprendre l’utilisation du signe dollar "$" Qui fait référence à une fonction spécifique internal function Dans open.account(). Je veux dire cette partie:

    ross$withdraw(30)
    ross$balance()
    robert$balance()

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

Questions:

1- Quelle est la signification du signe dollar "$" Dans Rfunction()?
2- Comment identifier ses attributs dans des fonctions, spécialement pour les fonctions que vous adoptez d'autres ( c'est-à-dire vous ne l'avez pas écrit)?
J'ai utilisé le script suivant

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

mais ce n'est pas utile. Je veux trouver un moyen d'extraire le (s) nom (s) des fonctions internes qui peuvent être référencées par "$" sans simplement appeler et rechercher le code écrit comme > open.account().
Par exemple, dans le cas de open.account(), j'aimerais voir quelque chose comme ceci:

$deposit
$withdraw
$balance

3- Y at-il une référence que je peux lire plus à ce sujet?
tnx!

14
Daniel

Le $ Vous permet d'extraire des éléments par leur nom à partir d'une liste nommée. Par exemple

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

Vous pouvez trouver les noms d'une liste en utilisant names()

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

Ceci est un opérateur d'extraction de base. Vous pouvez afficher la page d'aide correspondante en tapant ?Extract Dans R.

30
MrFlick

Il existe quatre formes d'opérateur d'extraction dans R: [, [[, $ Et @. La quatrième forme est également connue sous le nom d’opérateur d’emplacement, et est utilisée pour extraire le contenu d’objets construits avec le système d’objets S4, également appelé objet formellement défini dans R. La plupart des utilisateurs commençant R ne travaillent pas avec des objets définis formellement, nous ne discuterons donc pas ici de l’opérateur de slot.

Le premier formulaire, [, Peut être utilisé pour extraire le contenu de vecteurs, de listes ou de cadres de données.

Les deuxième et troisième formes, [[ Et $, Extraient le contenu d'un seul objet.

L'opérateur $ Utilise un nom pour effectuer l'extraction comme dans anObject$aName. Par conséquent, cela permet d'extraire des éléments d'une liste en fonction de leurs noms. Etant donné qu'une data.frame() est également une list(), elle est particulièrement bien adaptée à l'accès aux colonnes d'un cadre de données. Cela dit, ce formulaire ne fonctionne pas avec un index calculé ou une substitution de variable dans une fonction.

De même, on peut utiliser les formes [ Ou [[ Pour extraire un élément nommé d'un objet, tel que anObject["namedItem"] Ou anObject[["namedItem"]].

Pour plus de détails et des exemples utilisant chacune des formes de l'opérateur, veuillez lire mon article Formulaires de l'opérateur d'extraction .

16
Len Greski

Vous souhaiterez souvent sélectionner une colonne entière, à savoir une variable spécifique d'un bloc de données. Si vous voulez sélectionner tous les éléments du diamètre de la variable, par exemple, les deux feront l'affaire: nom_fichier_fichier [ colomn_position] nom_fichier_fichier [ "nomfichier_colom"]

cependant, il existe un raccourci. Si vos colonnes ont des noms, vous pouvez utiliser le signe $:

dataframe_name $ colomn_name

1
Naren