42

私は R で作業しており、私 (または私の協力者の 1 人) が変更できないいくつかの変数を定義したいと考えています。C++ では、次のようにします。

const std::string path( "/projects/current" );

Rプログラミング言語でこれを行うにはどうすればよいですか?

わかりやすくするために編集: R で次のような文字列を定義できることを知っています。

path = "/projects/current"

私が本当に望んでいるのは、「パス」という名前の変数に関連付けられた値を誰も変更できないことを保証する言語構造です。

コメントに応答するように編集します。

const がコンパイル時の保証であることは技術的には正しいですが、R インタープリターがエラー メッセージで実行停止をスローすることは私の考えでは有効です。たとえば、数値定数に値を割り当てようとするとどうなるかを見てください。

> 7 = 3
Error in 7 = 3 : invalid (do_set) left-hand side to assignment

だから私が本当に欲しいのは、一度だけ値を割り当てることができる言語機能であり、const として宣言された変数に新しい値を割り当てようとすると、何らかのエラーが発生するはずです。特にコンパイル段階がない場合は、実行時にエラーが発生するかどうかは気にしません。これは技術的にはウィキペディアの定義による const ではないかもしれませんが、非常に近いものです。また、R プログラミング言語ではこれができないようです。

4

6 に答える 6

52

参照lockBinding:

a <- 1
lockBinding("a", globalenv())
a <- 2
Error: cannot change value of locked binding for 'a'
于 2009-09-16T15:47:00.240 に答える
4

これはRでは不可能だと確信しています。誤って値を書き直すことを心配している場合、最も簡単な方法は、すべての定数をリスト構造に入れることです。それらの値を再使用します。何かのようなもの:

my.consts<-list(pi=3.14159,e=2.718,c=3e8)

次に、それらにアクセスする必要がある場合、何をすべきでないかを知るための補助メモワールがあり、通常の名前空間からそれらをプッシュします。

質問する別の場所は、R 開発メーリング リストです。お役に立てれば。

于 2009-06-02T09:45:33.960 に答える
3

(新しいアイデアのために編集:)bindenv関数は、

環境と環境内のバインディングを調整するための実験的なインターフェース。それらは、環境のロックと個々のバインディングを可能にし、変数を関数にリンクすることを可能にします。

これは、(非変数constへのポインターのように) 誤った安心感を与える可能性のあるもののように思えますが、役立つかもしれません。const

(フォーカスのために編集:)constコンパイル時の保証であり、メモリ内のビットのロックダウンではありません。R にはすべてのコードを一度に調べるコンパイル フェーズがないため (対話型で使用するために構築されています)、将来の命令が保証に違反しないことを確認する方法はありません。これを行う正しい方法がある場合は、R ヘルプリストにいる人が知っているでしょう。私が提案する回避策: 独自のコンパイルを偽造します。「定数」変数の出現ごとに対応するリテラルを手動で置き換える R コードを前処理するスクリプトを作成します。

(オリジナル:) C の "const" のように機能する変数を持つことで、どのような利点を得たいと考えていますか?

R には値による呼び出しのセマンティクスしかないため (環境を変更しない限り)、関数を呼び出して変数を破壊することを心配する理由はありません。ある種の命名規則を採用するか、何らかの OOP 構造を使用することは、あなたと共同作業者が誤って同じ名前の変数を使用することを心配している場合、おそらく正しい解決策です。

あなたが探している機能は存在するかもしれませんが、R の起源が対話型の環境であり、アクションを取り消すことができるようにする必要があることを考えると、それは疑わしいと思います。

于 2009-06-02T01:37:14.160 に答える
1

R には言語定数機能がありません。上記のリストのアイデアは適切です。私は個人的に ALL_CAPS のような命名規則を使用しています。

于 2009-07-22T06:39:40.903 に答える
-4

私はこのウェブサイトから以下の答えを取りました

最も単純な R 式は単なる定数値であり、通常は数値 (数値) または文字値 (テキスト) です。たとえば、10 分に対応する秒数を指定する必要がある場合は、数値を指定します。

> 600
[1] 600

データを読み取るファイルの名前を指定する必要がある場合は、名前を文字値として指定します。文字値は、二重引用符または単一引用符で囲む必要があります。

> "http://www.census.gov/ipc/www/popclockworld.html"
[1] "http://www.census.gov/ipc/www/popclockworld.html"
于 2009-06-01T21:04:47.207 に答える