web-dev-qa-db-ja.com

Rでバックティックは何をしますか?

Rでのバックティックの動作を理解しようとしています。

私が言えることから、これは?Quotes Rのドキュメントページ。

たとえば、Rコンソールで:

"[["
# [1] "[["
`[[`
# .Primitive("[[")

次のものと同等のものを返しているようです:

get("[[")
25
Megatron

一対のバックティックは、他の方法では予約されているか、または違法であるシンボルの名前または組み合わせを参照する方法です。予約されているのはifのような単語は言語の一部ですが、違法にはc a tのような構文以外の組み合わせが含まれます。予約済みと違法の2つのカテゴリは、Rのドキュメントではnon-syntactic namesと呼ばれています。

したがって、

`c a t` <- 1 # is valid R

そして

> `+` # is equivalent to typing in a syntactic function name
function (e1, e2)  .Primitive("+")

コメンターが述べたように、?QuotesにはNames and Identifiers:の下のバックティックに関する情報が含まれています

識別子は、文字、数字、ピリオド(.)、およびアンダースコアのシーケンスで構成されます。数字やアンダースコアで始めたり、ピリオドの後に数字を続けたりすることはできません。予約語は有効な識別子ではありません。

文字の定義は現在のロケールに依存しますが、ASCII数字のみが数字と見なされます。

このような識別子は構文名としても知られ、Rコードで直接使用できます。ほとんどの場合、引用符で囲まれていれば、他の名前を使用できます。推奨される引用符はバックティック(`)であり、deparseは通常それを使用しますが、多くの状況では一重引用符または二重引用符を使用できます(文字定数はしばしば名前に変換されるため) 。バッククォートが不可欠な1つの場所は、数式で変数名を区切ることです:formulaを参照してください

この散文は解析が少し難しいです。つまり、Rがトークンを名前として解析するには、1)文字の数字、ピリオド、およびアンダースコアでなければなりません。2)言語で予約された単語ではありません。それ以外の場合、名前として解析するには、バックティックを使用する必要があります。

?Reservedもご覧ください:

引用符の外の予約語は常に解析されて、「説明」でリンクされているオブジェクトへの参照となるため、構文名として使用することはできません(make.namesを参照)。それらは、非逆引用符などの非構文名として許可されます。

さらに、Advanced Rには、 環境 、および 関数 でのバックティックの使用例がいくつかあります。

25
jaimedash

それらは逐語的と同等です。たとえば...これを試してください:

df <- data.frame(20a=c(1,2),b=c(3,4))

エラーを与える

df <- data.frame(`20a`=c(1,2),b=c(3,4))

エラーを出さない

7
Amit Kohli

不適切な語彙を使用した不完全な答えは次のとおりです。バッククォートは、関数を非標準的な方法で使用していることをRに示す可能性があります。たとえば、リストのサブセット化関数である[[の使用方法を次に示します。

temp <- list("a"=1:10, "b"=rnorm(5))

通常の方法で要素1を抽出する

temp[[1]]

[[関数を使用して要素1を抽出する

`[[`(temp,1)
4
lmo