1

スクリプトのさまざまなポイントで異なる実数を想定する4 つの doubleabあるcとします。dまた、4 つの double のすべてが、 と呼ばれる別の double を中心とする値を持つと仮定しますX。つまり、次の関係が常に成立する必要があります。

  • a = X + 1
  • b = X + 5
  • c = X + 10
  • d = X + 15

私のスクリプトでは、 の値Xは常に変化しています。a, b,が と一緒cに変化するような関数をどのように書くのですか?dX

以下の関数を作成し、変更するsetAllたびに呼び出すXことはもちろん機能しませんが、私が望むものの精神にあります.:

setAll <- function(X) {
    a = X + 1
    b = X + 5
    c = X + 10
    d = X + 15
}
setAll(100) #if X = 100
4

2 に答える 2

5

の乱雑さを最小限に抑えたい場合は、.GlovalEnvこれらすべての変数を別の環境に保持することをお勧めします。たとえば、次のようになります。

> setAll <- function(X) {
+     if (!(exists('myParams') && is.environment(myParams))) {
+         myParams <- new.env()
+     }
+     myParams$a = X + 1
+     myParams$b = X + 5
+     myParams$c = X + 10
+     myParams$d = X + 15
+ }
> setAll(100) #if X = 100
> myParams$a
[1] 101

または、別の解決策として、OO プログラミングの手段で参照クラスを作成することもできます。

> myParam <- setRefClass('myParam', fields = list('X' = 'numeric', 'a' = 'numeric', 'b' = 'numeric', 'c' = 'numeric', 'd' = 'numeric'))
> myParam$methods(initialize = function(X, ...) {
+     .self$a <- X + 1
+     .self$b <- X + 5
+     .self$c <- X + 10
+     .self$d <- X + 15
+     callSuper(...)
+ })
> foo <- myParam(pi)
> foo$a
[1] 4.141593
> foo$b
[1] 8.141593
...

確かに、これらは初期の仮のワイヤーフレームにすぎませんが、今後のアイデアに役立つことを願っています。

于 2013-10-13T14:28:10.430 に答える
1

スクリプトを使用していて、ワークスペースでこれらのグローバル変数が必要な場合は、次の<<-演算子を使用します。?"<<-" ただし注意してください。このアプローチでは、重要な変数が意図した以外の方法で変更されず、移植性があまり高くないことを前提としています。 .

更新:setAll関数を変更すると機能するはずです-演算子で毎回リセットされるsetAll <- function()場合、引数は必要ありません。X<<-

于 2013-10-13T13:07:40.200 に答える