[解決済み] Rにおけるドットの意味 - 個人的な好み、命名規則、それとももっと?
質問
私は(おそらく)以下のような意味の "他のすべての変数" を指しているのではありません。
var1~.
のような意味です。
私が指摘されたのは
plyr
をもう一度調べてみると
mlply
を見て、なぜパラメータはこのように先頭のドットで定義されるのだろうと思いました。
function (.data, .fun = NULL, ..., .expand = TRUE, .progress = "none",
.parallel = FALSE)
{
if (is.matrix(.data) & !is.list(.data))
.data <- .matrix_to_df(.data)
f <- splat(.fun)
alply(.data = .data, .margins = 1, .fun = f, ..., .expand = .expand,
.progress = .progress, .parallel = .parallel)
}
<environment: namespace:plyr>
これの使い道は何ですか?単なる個人的な好みなのか、命名規則なのか、それ以上なのか?Rは機能的すぎて、とっくにやってるトリックを見逃すことがよくあります。
どのように解決するのですか?
関数名のドットは、以下のいずれかを意味します。
- 全くなし
- S3メソッドにおけるメソッドとクラスの間のセパレータ
- 関数名を非表示にする
考えられる意味
1. 全くない
のドットは
data.frame
で区切られていない
data
から
frame
から、視覚以外では
2. S3メソッドにおけるメソッドとクラスの分離
plot
は、一般的なS3メソッドの一例です。 このように
plot.lm
と
plot.glm
を呼び出すときに使用される基礎となる関数定義です。
plot(lm(...))
または
plot(glm(...))
3. 内部機能を隠したい
パッケージを書くとき、関数名に先行ドットを使うと便利なことがあります。 パッケージの純粋な内部関数として意図されている関数は、時々これを使用します。
この文脈では、quot;somewhat hidden" は単に、変数 (または関数) を
ls()
. 強制的に
ls
にこれらの変数を表示させるには
ls(all.names=TRUE)
. 変数の最初の文字にドットを使うことで、変数自体のスコープを変更することができます。 例えば
x <- 3
.x <- 4
ls()
[1] "x"
ls(all.names=TRUE)
[1] ".x" "x"
x
[1] 3
.x
[1] 4
4. その他の考えられる理由
ハドレーでは プライヤ パッケージでは、関数名の先頭にドットを使用する慣習があります。 これは、変数名を解決するときに、値が内部関数変数ではなく、ユーザー変数に解決されることを保証しようとするメカニズムとしてです。
複雑化
このように異なる用途が混在していると、同じ関数名で異なる用途が混在することになり、非常に混乱した状況になることがあります。
例えば
data.frame
をリストに変換するには
as.list(..)
as.list(iris)
この場合
as.list
は S3 のジェネリックメソッドであり、そのメソッドに
data.frame
を渡しています。 したがって、S3関数は
as.list.data.frame
:
> as.list.data.frame
function (x, ...)
{
x <- unclass(x)
attr(x, "row.names") <- NULL
x
}
<environment: namespace:base>
そして、本当に壮大なものを作るために
data.table
パッケージを読み込んで、関数
as.data.table.data.frame
:
> library(data.table)
> methods(as.data.table)
[1] as.data.table.data.frame* as.data.table.data.table* as.data.table.matrix*
Non-visible functions are asterisked
> data.table:::as.data.table.data.frame
function (x, keep.rownames = FALSE)
{
if (keep.rownames)
return(data.table(rn = rownames(x), x, keep.rownames = FALSE))
attr(x, "row.names") = .set_row_names(nrow(x))
class(x) = c("data.table", "data.frame")
x
}
<environment: namespace:data.table>
関連
-
Rでファイルを読み込む際に、そのようなファイルまたはディレクトリが見つかりません。
-
[解決済み] 文字列ベクトルを代入して、列名を持つ空のデータフレームを作成する?重複
-
[解決済み] Rで文字列から文字を削除する
-
[解決済み] Pythonの変数名や関数名の命名規則について教えてください。
-
[解決済み] ベクトル中のxの値を持つ要素の個数を数える
-
[解決済み] Javaパッケージ名の単語区切り記号はどのようなものですか?
-
[解決済み】 booleanフィールドの場合、そのゲッター/セッターの命名規則は何ですか?
-
[解決済み】data.frameのグループごとの平均値【重複】について
-
[解決済み] Javaで個人/趣味のプロジェクトに使用するパッケージの命名規則を教えてください。
-
[解決済み] MySQL FK の適切な命名規則とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
DEG解析で'row.names'に重複した名前を付けられない場合の解決法
-
[解決済み] Rでcは何をするのですか?重複] [重複
-
[解決済み] ggplot 2.0.0でのポイントサイズ
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み】data.frameのグループごとの平均値【重複】について
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
-
[解決済み】エラー:Rで関数が見つかりませんでした。
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする