Rの学習を通して、次のようなコードに出会いましたこちら。
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()
関数の中で、特定の内部関数
を参照する "$"
ドル記号の使用方法を学んだことです。つまり、この部分です。
ross$withdraw(30)
ross$balance()
robert$balance()
ross$deposit(50)
ross$balance()
ross$withdraw(500)
質問:
1- R
function()
のドル記号 "$"
の意味は何ですか ?
2- 関数の中で、特に他から採用した(つまり自分が書いたのではない)関数の属性を 識別 するにはどうしたらよいのでしょうか?
以下のようなスクリプトを使いました。
> grep("$", open.account())
[1] 1 2 3
open.account()のように、記述されたコードを呼び出し検索するだけでなく、 "$"で参照できる内部関数の名前を抽出する方法が知りたいのです。 例えば、
open.account()`の場合、以下のようなものが欲しいです。
$deposit
$withdraw
$balance
3- もっと詳しく読める文献はありませんか?
tnx!
Rのextract演算子には、4つの形式があります。R には、 [
, [[
, $
, そして @
という 4 つの形式の extract 演算子があります。4番目の形式はスロット演算子としても知られており、S4オブジェクトシステムで構築されたオブジェクトからコンテンツを抽出するために使用されます(Rでは正式定義オブジェクトとしても知られています)。
最初の形式である [
は、ベクトル、リスト、データフレームから内容を抽出するために使用することができます。
2番目と3番目の形式である [[
と $
は、1つのオブジェクトからコンテンツを取り出します。
演算子 $
は、 anObject$aName
のように、名前を使用して抽出を行います。したがって、名前に基づいたリストからの項目の抽出が可能になります。data.frame()は
list()` でもあるので、特にデータフレーム内のカラムにアクセスするのに適しています。とはいえ、この形式は計算されたインデックスや関数内の変数置換では動作しません。
同様に、オブジェクトから名前付きの項目を取り出すには、 anObject["namedItem"]
や anObject[["namedItem"]]
のように [
や [[
]] フォームを使用することができます。
この演算子の各形式の詳細や使用例については、拙稿Forms of the Extract Operatorをお読みください。
データフレームから列全体、つまりある特定の変数を選択したいことはよくあります。例えば、変数 diameter のすべての要素を選択したい場合、これらの両方がトリックを行います。 データフレーム名[,colomn_position]。 dataframe_name[,"colomn_name"] となります。
しかし、ショートカットがあります。もし、カラムに名前があれば、$記号を使うことができます。
dataframe_name$colomn_name」となります。