web-dev-qa-db-ja.com

R function()のドル記号「$」の意味は何ですか?

Rを学習することで、次のコードに遭遇しました 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)

open.account()関数内の特定の"$"を参照するinternal functionドル記号の使用法を学習する、このコードに関する私の関心の最大のものは何ですか。私はこの部分を意味します:

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

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

質問:

1- Rfunction()"$"のドル記号の意味は何ですか?
2-方法identify、特に他の(から採用している関数の場合)すなわちそれを書いていない)?
次のスクリプトを使用しました

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

しかし、それは役に立たない> open.account()として記述されたコードを呼び出して検索することなく、「$」で参照できる内部関数の名前を抽出する方法を見つけたい。
たとえばopen.account()の場合、次のようなものを見たいです:

$deposit
$withdraw
$balance

3-私はそれについてもっと読むことができる参照がありますか?
tnx!

14
Daniel

$を使用すると、名前付きリストから名前で要素を抽出できます。例えば

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

names()を使用してリストの名前を見つけることができます

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

これは基本的な抽出演算子です。 Rで?Extractと入力すると、対応するヘルプページを表示できます。

30
MrFlick

Rの抽出演算子には、[[[$、および@の4つの形式があります。 4番目の形式はスロット演算子とも呼ばれ、S4オブジェクトシステムで構築されたオブジェクトからコンテンツを抽出するために使用されます。これは、Rで正式に定義されたオブジェクトとも呼ばれます。 Rユーザーは正式に定義されたオブジェクトを操作しないため、ここではスロット演算子については説明しません。

最初の形式[は、ベクター、リスト、またはデータフレームからコンテンツを抽出するために使用できます。

2番目と3番目のフォーム[[および$は、単一のオブジェクトからコンテンツを抽出します。

$演算子は、anObject$aNameのように名前を使用して抽出を実行します。したがって、名前に基づいてリストから項目を抽出できます。 data.frame()list()でもあるため、データフレームの列にアクセスするのに特に適しています。ただし、この形式は、計算されたインデックス、または関数内の変数置換では機能しません。

同様に、[または[[フォームを使用して、anObject["namedItem"]anObject[["namedItem"]]などのオブジェクトから名前付きアイテムを抽出できます。

演算子の各形式を使用した詳細と例については、私の記事 Extract Operatorの形式 を参照してください。

16
Len Greski

多くの場合、列全体、つまりデータフレームから特定の1つの変数を選択します。たとえば、可変直径のすべての要素を選択する場合、これらの両方がトリックを実行します。dataframe_name [、colomn_position] dataframe_name [、 "colomn_name"]

ただし、ショートカットがあります。列に名前がある場合は、$記号を使用できます。

dataframe_name $ colomn_name

1
Naren