2017-12-13 28 views
0

ユーザー定義関数内のグローバルデータフレームを変更しています。データフレームは、関数の外部で作成されます。グローバルvsユーザー定義関数内のローカル

しかし、私のデータフレームへの変更は、機能の外には見えません。私が返品オプションを使用する場合に限り、私はデータフレームになります。

これを変更する方法はありますか?

+6

これは、関数型プログラミングが機能する方法です。 – Gregor

+0

二重矢印を使用して、関数の外に '<< - 'を割り当てることができます。しかし、@ Gregorのコメントを読んでください。 –

+3

はい、それを行う方法があります。しかし、あなたは本当にすべきではありません。 – Dason

答えて

2

あなたがであるかどうか Rで「参照で呼び出す」機能は1つの質問です(コメントに記載されています - 一般的に答えはノーです)。

しかし、あなたはかどうか尋ねました。答えははいです。です。機能のローカルスコープでグローバルデータフレームを変更してください。 1)eval.parent()(評価スコープを呼び出しスコープ(おそらくグローバルスコープ)に設定します)と2)substitute()(1つを破棄して新しい参照を作成する代わりに変数参照を置き換える)を使用してください。 。

ここでは例です:

> attach(mtcars) 
> my_cars <- mtcars[mpg,] #not sorted 
> pointless_sort <- function() { 
+  eval.parent(substitute(my_cars<-mtcars[order(mpg),])) 
+ } 
> pointless_sort() 
> #here the global my_cars is ordered/sorted by mpg 

の重要事項:1)あなたはがそれを行うことができます。 2)良いプログラミングとは、一般的にはではなく、という意味です(しかし、私たちはすべて怠け者であり、コードを分割するのに便利です)。今あなたは力を持っています。

「Great Power Comes Great Responsibility」

+0

素晴らしいです、これを実証していただきありがとうございます。私はアプローチを避けようとしますが、これを私の頭の後ろに(ちょうどの場合に)保持してください。 –

+0

正直なところ、それは状況によって異なります。純粋主義者は決してそれをしないと言います。プロダクションやメンテナンスされたコードではない場合は、一度やることだけですが、違いは何ですか? – DarkerIvy

+0

合意。初心者としての私にとっては、早い段階で「堅牢な」プログラミング原則を順守することは役に立ちます。 –

関連する問題