2015-10-13 4 views
5

大規模なデータセットの分析ワークフローを構築していますが、まず小規模なデータセットで検証する必要があります。しかし新しい環境に切り替える方法とそれに固執するには?

sample_data<-new.env() 
attach(sample_data) 
# downloading sample_data sets 
sample_df_1 <- some_download_function(parameters1) 
sample_df_2 <- some_download_function(parameters2) 
... 
# doing some stuff with them 
... 

私はこれを行う際に、sample_df_1sample_df_2は、地球環境に保存されます:私は何をしたいのですが、このような環境の中でそれらを置くことによって、実際のデータセットから、私の「サンプリング」データセットを分離することです私のsample_data環境ではなくもちろん、私はassign(..., envir=sample_data)を使うことができますが、それはやや面倒です。最終的なコードにそれらを表示したくありません。

withを使用するのは理想的ではありません。その内部のコード行は1つずつ実行できないため、開発段階ではむしろ不便です。

私は何を達成したいと考えていますが、たとえば、debugundebugなどの行動と同じ種類である:

switch_to_env(sample_data) 
# Everything done here will be done within environment "sample_data" 
# And the lines of codes here can be executed one by one 
switch_to_env(.GlobalEnv) 

@Gregorが良いだろう「オプションを設定する」、指摘したように私が探しているものを説明し:R REPLが式を評価する環境をユーザーが指定できるオプション。

ありがとう!

+1

私は 'with'について理解していますが、'(sample_data、{a < - 1; b < - 2}))で '' – jenesaisquoi

+1

'の式を実行できます。私が開発したいのは、それらをデバッグするために 'with()'を書く必要があります。なぜなら、 'with'のコードは全体としてしか評価できないからです。準備が整ったら、 'with'関数からそれらをコピーしなければなりません。私の意見では、提案されたアプローチを使用する方がはるかに迅速で読みやすいでしょう。 – Benny

+0

問題は、Rの環境がそのように動作しないことです。割り当てには異なる「デフォルト」環境を割り当てることはできません。 Rは関数型言語であり、通常、関数を使用してスコープ/環境を管理します。ですから、環境をとり、恐らくそこに 'with()'をネストする関数を書くべきです。 – MrFlick

答えて

1

あなたはように新しい環境に変数を割り当てることができます:あなたが持っているかsample_data$sample_df_1

を使用するとあなたはその後、環境を取り付けいずれかの方法で、新しい環境内でこれらの変数にアクセスすることができます

sample_data<-new.env() 
sample_data$sample_df_1 <- some_download_function(parameters1) 
sample_data$sample_df_2 <- some_download_function(parameters2) 

は、ということですどういう意味ですか?

+0

OPはスイッチを押す(またはオプションを設定する)ことを望んでおり、すべてのオブジェクトの前に 'sample_data $ 'をタイプしなくてもこの動作を得ることができると思います。 – Gregor

+0

あなたは私にグレゴールを手に入れます。 – Benny

2

これはあなたが探しているものではありませんが、実用的で安全だと思います。

新しい環境で開発したい場合は、新しいファイルと新しいRセッション(たとえばsample_data.R)、source()という親環境に必要なオブジェクトを作成するスクリプトを開き、開発を通常どおりに行います。

あなたは(あなたのオリジナルのRセッション/環境で)これを行うことができ、あなたの本当地球環境から特定の環境内でこれらにアクセスしたい

sample_data<-new.env() 
source("sample_data.R", local = sample_data) 

それはいくつかの短所があります頻繁に非常に不便特に、コードの実行に時間がかかる場合は、前後に切り替えてください。しかし、私は実際には、異なる引数のコードを別々のファイルに分けるようにしています。これは、場所や作業環境が混ざってしまうと、バグが発生する可能性があります。別々のファイルを持つことは、コード分離を強制することによっていくらかの保護を提供します。また、さまざまなサブ環境を実行から簡単に省略することができます。メインファイルのsource()行をコメントアウトすると、サブ環境全体が切り替わります。

+0

ありがとう@Gregor。私が最初に意図したものではありませんでしたが、私のワークフローを改善するために働くことができるいくつかの洞察を示しました。 – Benny