1

同じように動作すると予想されるコードのスニペットが2つありますが、そうではありません。

  position <- function(t) {
    coordinates <- c(cosh(t), sinh(t))

    return(coordinates[1])
  }

  position <- function(t) {
    coordinates <- c(cosh(t), sinh(t))

    return(cosh(t))
  }

この関数を使用しpositionて曲線をプロットします。最初のスニペットでは、曲線はプロットされません。2番目のスニペットでは、曲線がプロットされます。

2つのスニペットの機能の違いは何ですか?その理由は何ですか?

4

3 に答える 3

3

返されるものは、渡された引数のタイプによって異なります。引数「t」が座標を処理するように設計された関数に期待されるような行列である場合、行列はから返さcosh(t)sinh(t)ます。

最初の関数は、形成されてから「まっすぐにされた」行列の最初の要素のみを返します。これは、c関数によって行列の寸法が失われたためです。マトリックス文字を保持したい場合は、データを処理する次の関数を使用するrbindか、それに応じて使用します。cbind

2番目の関数は、最初に「座標」を計算し、cosh(t)代わりにによって形成された行列を返すため、ガベージコレクターに表示されなくなります。

現在、関数に渡すデータ構造の種類について私たち全員に推測させているため、より良い答えを得ることができません。dput()この関数への引数の結果を投稿する必要があります。そして、プロット関数のヘルプページが引数タイプとして何を期待しているのかを教えてください。

于 2012-12-02T16:36:54.207 に答える
1

結果として

coordinates <- c(cosh(t), sinh(t))

長さの数値ベクトルです2 * length(t)

コマンド

return(coordinates[1])

このベクトルの最初の値のみを返します。(との結果はcoordinates[1]、のcosh(t)場合にのみ同一ですlength(t) == 1。)の結果を返すには、 :の長さに基づいたシーケンスでcosh(h)インデックスを作成できます。coordinatest

coordinates <- c(cosh(t), sinh(t))

return(coordinates[seq_along(t)])
于 2012-12-02T16:07:17.213 に答える
0

最初の例では二重角かっこを使用します。

  coordinates[[1]]


トラブルシューティングの際の便利なヒントとして、str(position(x))2つの異なる関数を使用して2つの関数の出力を調べると、違いがわかります。

また試してみてください

   str(vec[1])
   str(vec[[1]])
于 2012-12-02T16:01:51.833 に答える