Rの「。」(ドット)の意味は何ですか?


39

「R in a Nutshell」という本を読んでいます。そして、「。」の部分をスキップしたようです。「sample.formula」のように説明されました。

> sample.formula <- as.formula(y~x1+x2)

サンプルは、他の言語のようにフィールド式を持つオブジェクトですか?もしそうなら、どのようにしてこのオブジェクトが持っている他のフィールド/機能を見つけることができますか?(型宣言)

編集:私はちょうど「。」の別の紛らわしい使い方を見つけました:

> svm(formula = is_spam~., data = spambase.training)

(〜。、の間のドット)


is_spam〜で表示されるドット。コマンドは、説明変数がないことを意味します。通常、モデル式ではy〜xが表示されますが、x変数がない場合はy〜です。他の変数を使用せずにyの値を推測します。これはモデルと同じy=β0
クリストファーアデン

12
@Christopherそれどころか、.式のRは、データフレーム内のすべての変数spambase.training(を除くis_spam)を予測子として使用するようRに指示します。モデルはに適合します。y=β0y ~ 1
カラカル

事前にソースを確認しませんでした。訂正していただきありがとうございます!
クリストファーアデン

@caracal(+1)うわー、私はこれを行う方法を疑問に思っていました。ありがとう!
トーマスレヴィン

回答:


30

通常の名前のようにドットを使用できます。ただし、追加の特別な解釈があります。特定のクラスを持つオブジェクトがあるとします:

 a <- list(b=1)
 class(a) <- "myclass"

次にmyfunction、次の方法で標準ジェネリックとして宣言します。

 myfunction <- function(x,...) UseMethod("myfunction")

次に関数を宣言します

 myfunction.myclass <- function(x,...) x$b+1

その場合、ドットには特別な意味があります。クラスmyclass呼び出しのあるすべてのオブジェクト

 myfunction(a)

実際に関数を呼び出しますmyfunction.myclass

 > myfunction(a)
  [1] 2

これはRで広く使用されており、最も適切な例はfunction summaryです。各クラスには独自のsummary関数があるため、たとえばモデル(通常は特定のクラスのオブジェクトを返す)にsummary適合する場合、呼び出す必要があり、その特定のモデルに適切な集計関数を呼び出します。


この質問がまったく答えられないので、この答えが受け入れられ、とても支持されたことに非常に驚いています!これは、を意味し、省略記号 ...質問は明らかに意味のに対し、「ドット」として(単一語彙素ではなく、三つの異なるものの順)、ドットを .全く異なる方法で式や名前に使用されるように正確に同時で説明したように、チェイスによる答え。
whuber

3
さて、省略記号については言及しません。ドットがS3メソッドのディスパッチに使用されることを説明しようとしました。汎用関数には通常楕円があります。だから私はそれらを使用しました。コードから削除しても、答えは変わりません。質問の本文を読み直した後に別の答えを出すので、編集の前に答えを出したと推測できます。
mpiktas

1
ご説明ありがとうございます。「...」の出現は、あなたがそれを「ドット」と呼んでいると信じているように2回誤解したと思います。
whuber

12

関連するビット?formulaについては、ヘルプページをご覧ください.

には2つの特別な解釈があります。数式で。通常のものは、モデルフィッティング関数のデータ引数のコンテキストにあり、「他の方法では式にないすべての列」を意味します。terms.formulaを参照してください。update.formulaのコンテキストでは、「式のこの部分に以前あったもの」を意味します。

または、reshapereshape2パッケージはを使用....、少し異なる(から?cast):

いくつかの特殊変数があります。「...」は、式で使用されない他のすべての変数を表し、「。」は 変数を表さない


5

いくつかの例外(S3メソッドのディスパッチ)がありますが、通常は読みやすさの補助として使用されるだけであり、特別な意味はありません。


2
私は反対のことを言います-それは特別な意味(あなたが言及するS3ディスパッチ)を持っていますが、いくつかの古い命名規則はS3ジェネリックではない関数名に.。それは関数の名前に関係します。(非機能)オブジェクトの名前に関しては、そうです、特別な意味はありません。
モニカの復活-G.シンプソン

名前の先頭で、a .はオブジェクトを非表示にしls()ます。
カラカル

2

sample.formulaのドットは、視覚的に以外、サンプルformulaから分離しません。これは単なる変数名です。R変数名は、1つの例外を除き、英数字とドット(。)およびアンダースコア(_)で構成できます。実際のルールは次のとおりです。

構文的に有効な名前は、文字、数字、およびドットまたは下線文字で構成され、数字が後に続かない文字またはドットで始まります。。2way」などの名前は無効であり、予約語でもありません。

2番目のケース(is_spam〜のケース)は異なり、上記で説明されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.