web-dev-qa-db-ja.com

Rの変数名の制限

Rの変数名に使用できる文字に関する制限(および他の制限)は何ですか?

(これは一般的な参照の叫び声ですが、答えを見つけることができないようです)

45
Kyle Brandt

?make.namesからのディスカッションを探しているかもしれません。

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

ヘルプファイル自体には、予約語のリストへのリンクがあります。

次のブレークでwhile関数が繰り返される場合

TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_

コメントからの他の多くの良いメモには、ジェームズによる R FAQ この問題への対処のポイントと、関連するSO question 構文的に有効な名前のチェックを処理します。

35
joran

ほとんどなし! 「assign」を使用して、とんでもない変数名を作成できます。

assign("1",99)
ls()
# [1] "1"

はい、それは「1」という変数です。数字1。幸いなことに、整数1の値は変更されず、その値を取得するために少し努力する必要があります。

1
# [1] 1
get("1")
# [1] 99

一部の人々が言及するかもしれない「構文上の制限」は、パーサーによって純粋に課されています。基本的に、Rオブジェクトを呼び出すことができないものはほとんどありません。 '<-'代入演算子を介して実行することはできません。 「get」はあなたを自由に設定します:)

23
Spacedman

以下はあなたの質問に直接対応していないかもしれませんが、大いに役立ちます。 exists()コマンドを試して、何かが既に存在するかどうかを確認してください。このようにして、変数または関数にシステム名を使用しないでください。例...

   > exists('for')
   [1] TRUE

   >exists('myvariable')
   [1] FALSE
6
Stat-R

ビルトインベースパッケージのmake.names()関数を使用すると、次の場合に役立ちます。

is_valid_name<- function(x)
{
  length_condition = if(getRversion() < "2.13.0") 256L else 10000L
  is_short_enough = nchar(x) <= length_condition
  is_valid_name = (make.names(x) == x)

  final_condition = is_short_enough && is_valid_name
  return(final_condition)
}
2
omarflorez