5

これは基本的な R の質問です。R には環境の概念があります。では、それにはどのような目的があり、いつ複数を開始する必要があり、それらを切り替えるにはどうすればよいでしょうか? 複数の環境 (.Rdata ファイルのコンテンツを検索する以外) の利点は何ですか?

4

3 に答える 3

8

環境の考え方は重要であり、ほとんどの場合、意識せずに常に使用しています。R を使用しているだけで、特別なことをしていない場合は、環境を間接的に使用するだけで十分であり、明示的に環境を作成して操作する必要はありません。より高度な使用方法に慣れて初めて、より多くのことを理解する必要があります。環境を (間接的に) 使用する主な場所は、すべての関数に独自の環境があるため、関数を実行するたびに新しい環境を使用することになります。これが重要な理由は、関数が「x」という名前の変数を使用し、「x」という名前の変数がある場合、コンピューターはそれらをまっすぐに保ち、必要なときに正しい変数と「x」のコピーを使用できることを意味するためです。 " は関数版で書き直せません。

環境を使用する可能性のあるその他のケース: 各パッケージには独自の環境があるため、2 つのパッケージを同じ名前の内部関数で両方ともロードでき、互いに干渉しません。グローバルまたは作業環境ではなく、新しい環境をアタッチし、関数定義をその環境にロードすることで、ワークスペースを少しきれいに保つことができます。独自の関数を作成し、関数間で変数を共有したい場合は、環境について理解する必要があります。環境を使用して、値渡しの代わりに参照渡しをエミュレートできます (これらのフレーズを認識していない場合は、おそらく問題にはなりません)。

于 2012-10-26T19:32:21.470 に答える
6

environmentsは順序付けられていないsと考えることができますlist。どちらのデータ型も、ハッシュテーブルのデータ構造のようなもの、つまり名前から値へのマッピングをユーザーに提供します。sに順序付けがないため、同様のタスクのsenvironmentと比較してパフォーマンスが向上します。list

アクセスは機能[[$、両方で機能します。

A nice fact about environments which is not true for lists is that environments pass by reference when supplied as function arguments, offering a way to improve performance when working large objects.

于 2012-10-26T18:59:36.010 に答える
4

個人的には、環境を直接操作することはありません。代わりに、スクリプトを関数に分割します。これにより、再利用性が向上し、構造が強化されます。さらに、各関数は独自の環境で実行されるため、変数などへの干渉を最小限に抑えることができます。

于 2012-10-26T18:42:03.987 に答える