0

tをユーザー入力mに依存する繰り返し要素の3Dベクトル、つまりt = c(m、m、m)と定義し、それを次の関数で使用する必要があります。

b <- c(0.5,0.2,1)  
fn <- function(m) { sum(t-b) }

tが要素mを持つ3d反復ベクトルであることをRに伝える方法はありますか?

4

1 に答える 1

1

rep()1つのオプションとして、この関数を使用します。

b <- c(0.5,0.2,1)

fn <- function(m, b) {
  t <- rep(m , 3)
  sum(t-b)
}

> fn(2, b)
[1] 4.3

この場合、リサイクルに頼ることができます。

fn2 <- function(m, b) {
  sum(m-b)
}

> fn2(2, b)
[1] 4.3

ここで、Rは自動的に拡張mされて正しい長さになります。mただし、これは危険です。特に、長さとb一致するかどうかを確認するためのチェックを行わない場合は危険です。

を使用するより良いバージョンは、必要なrep()長さをハードコーディングするのではなく、次のtようにから取得することですb

fn3 <- function(m, b) {
  t <- rep(m , length(b))
  sum(t - b)
}

> fn3(2, b)
[1] 4.3
> b <- c(b, b) ## make `b` longer
> length(b)
[1] 6
> fn3(2, b)    ## fn3() still works
[1] 8.6

あなたへのメモfn(); b 関数内を参照しますがb、引数として渡さないでください。bしたがって、Rがグローバルワークスペースで適切なものを見つけることに依存しています。これは良い習慣ではありません。代わりに、例で行ったように、関数内で必要なすべてのオブジェクトを引数を介して渡します。そうすれば、エラーを追跡しやすくなります。

于 2013-01-09T10:55:56.570 に答える