2017-03-02 3 views
2

En apprenant R, je viens de tomber sur le code suivant expliqué 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) 

Quel est le plus de mon intérêt sur ce code, l'apprentissage de l'utilisation de "$" signe dollar qui se réfèrent à une internal function spécifique en fonction 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 du dollar "$" dans Rfunction()?
2- Comment identifier ses attributs dans les 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 il est pas utile, je veux trouver un moyen d'extraire le nom (s) des fonctions internes qui peuvent être référence par « $ » sans juste en appelant et en recherchant la code écrit comme > open.account().
Par exemple, en cas de open.account() je voudrais voir quelque chose comme ceci:

$deposit 
$withdraw 
$balance 

3- Y at-il référence que je peux en lire davantage?
tnx!

+3

Voir le fichier d'aide: '?" $ "'. – lmo

Répondre

12

Le $ vous permet d'extraire les éléments par 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 à l'aide 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.

-1

Vous voudrez souvent sélectionner une colonne entière, à savoir une variable spécifique d'une trame de données. Si vous voulez sélectionner tous les éléments du diamètre variable, par exemple, ces deux fera l'affaire: dataframe_name [, colomn_position] dataframe_name [ « colomn_name »]

Cependant, il y a un court Couper. Si vos colonnes ont des noms, vous pouvez utiliser le signe $:

dataframe_name $ colomn_name

2

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

Le premier formulaire, [, peut être utilisé pour extraire le contenu de vecteurs, de listes ou de trames 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, il permet d'extraire des éléments d'une liste en fonction de leur nom. Comme data.frame() est également un list(), il est particulièrement bien adapté pour accéder aux colonnes dans une trame de données. Cela dit, cette forme ne fonctionne pas avec un index calculé, ou une substitution de variable dans une fonction.

De même, on peut utiliser les [ ou [[ formes pour extraire un élément nommé à partir d'un objet, tel anObject["namedItem"] ou anObject[["namedItem"]].

Pour plus de détails et d'exemples utilisant chacune des formes de l'opérateur, veuillez lire mon article Forms of the Extract Operator.