1

「function(x)」のしくみはわかりますが、ここでの「function()」の役割は何ですか?

z <- function() {
  y <- 2
  function(x) {
    x + y
  }
}
4

3 に答える 3

5

function関数の作成の一部であるキーワードです( Gillesが彼の答えで説明しているプログラミングの意味で)。他の部分は、引数リスト(括弧内)と関数本体(中括弧内)です。

あなたの例でzは、は引数を取らない関数です。これは、1つの引数(名前付きx)をとる関数を返します(Rは、デフォルトで最後に評価されたステートメントを戻り値として返すため)。その関数は引数xに2を加えたものを返します。

z呼び出されると(引数なしで:)、2が(関数変数スコープ内で、ここでは取り上げない追加の概念z())に割り当てられます。y次に、という名前の単一の引数を取る関数(名前なし)を作成します。この関数は、呼び出されるとx、引数xに2を加えたものを返します。その無名関数は呼び出しから返されz、おそらく後で呼び出すことができるように保存されます。 。

関数をオブジェクトとして渡す方法の詳細については、 https ://github.com/hadley/devtools/wiki/Functionsおよびhttps://github.com/hadley/devtools/wiki/Functionalsを参照してください。

于 2013-02-14T21:12:57.933 に答える
3

「関数」という言葉は、数学プログラミングでは多少異なる意味を持っています。数学では、関数はパラメータの可能な各値と結果の間の対応です。プログラミングでは、関数はパラメータから結果を計算するための一連の命令です。

数学では、引数のない関数は定数です。プログラミングでは、これは当てはまりません。関数には、何かを印刷するなどの副作用がある可能性があるためです。したがって、プログラムで引数のない多くの関数に遭遇します。

関数function(x) { x + y }は変数に依存しますy。副作用がないため、この関数は$ f(x)= x +y$で定義される数学関数と非常によく似ています。ただし、この定義は、指定された値のに対してのみ完了しますy。前の命令はy2に設定されているので、

function() {
  y <- 2
  function(x) {
    x + y
  }
}

と同等です

function () {
  function(x) {
    x + 2
  }
}

同じ値に適用すると、両方の定義が同じ結果を生成するという意味で。ただし、これらはわずかに異なる方法で計算されます。

その関数には名前が付けられていますzz(引数なしで、と書く)を呼び出すと、これは関数、または同等z()のものを構築します。これは、引数に2を追加する1つの引数の関数です。したがって、次のように書くことができます—結果は5です。function (x) { x + 2 }z()z()(3)

これは明らかにおもちゃの例です。講義を進めるにつれて、そのような機能構築が他の機能と混合されて有用なことを達成する、次第に複雑な例が見られるようになります。

于 2013-02-14T21:24:17.707 に答える
1

いくつかの助けを借りて、なぜそれらが役立つのかを理解するのに役立つ、正式な引数のない関数の例をいくつか選びました。

副作用のある機能

  • plot.new()たとえば、グラフィックスデバイスを初期化します。
  • コンソールバッファを更新したいですか? flush.console()あなたの背中があります。

目的の狭い機能

これはおそらくほとんどの場合です。

  • 日付/時刻を知りたいですか?を呼び出しdate()ます。
  • Rのバージョンを知りたいですか?を呼び出しgetRversion()ます。
于 2013-02-15T15:47:30.770 に答える