18

グローバル環境 ( ) に親としてアタッチされるようなRsource()のスクリプトへの方法はありますか?.GlobalEnv

現在、スクリプトをソースすると、そのスクリプトのすべての変数と関数がグローバル (インタラクティブ) 環境に表示されます。これらの変数と関数を検索パスに含めたいのですが、.GlobalEnv. つまり、ソース スクリプトが、グローバル環境とベース環境の間でアタッチされるアタッチされたパッケージのように動作することを望みます (高度な R 環境の図を参照) 。

ここに画像の説明を入力

4

5 に答える 5

11

次の環境挿入は、目的の機能を実現するために表示されます。

現在の検索パスを確認します。

search()
# [1] ".GlobalEnv"        "package:stats"     "package:graphics"
# [4] "package:grDevices" "package:utils"     "package:datasets"
# [7] "package:methods"   "Autoloads"         "package:base"

ソース パッケージ用の新しい環境を追加し、次の場合localにパラメーターを使用しますsource()

myEnv <- new.env()    
source("some_other_script.R", local=myEnv)
attach(myEnv, name="sourced_scripts")

検索パスを確認します。

search()
#  [1] ".GlobalEnv"        "sourced_scripts"   "package:dplyr"
#  [4] "package:stats"     "package:graphics"  "package:grDevices"
#  [7] "package:utils"     "package:datasets"  "package:methods"
# [10] "Autoloads"         "package:base"

ソーシングattach()に新しい環境を作成することに注意してください。これは、検索パスのスクリプト環境の後に追加されます。dplyr

于 2016-09-21T15:44:22.857 に答える
5

sourceドキュメントから、引数localは、ソースの式が評価される場所を決定する環境にすることができます。

sourceこれは、新しい環境を作成し、この環境を に渡して実行しlocal、次にattach環境を検索パスに渡すことができることを示唆しています。

または、 attach withwhat=NULLを使用して空の環境を作成し、戻り値を保存して、それをlocalin に渡すことができsourceます。

tmp <- attach(what=NULL)
source('test.R', local=tmp)

または単一行として:

source('test.R', local=attach(NULL))
于 2016-09-21T15:50:35.530 に答える