0

ルールは次のとおりfor(i in 1:10){v[i]=f(q,m)}です。f(q,m) は、入力 q、m に応じた間隔でランダムな出力を生成する関数です。'v' はベクトルです。

このように v のコンポーネントを指定した後、v と入力してベクトルを返すことができます。私ができるようにしたいのは、入力 q,m を取り、ベクトル v を返す関数を定義することです。

その理由は、最終的には、変数 q にわたる v の平均をグラフ化できるようにしたいからです。しかし、最初に v を返す関数が必要だと思います。したがって、そのような関数を定義する方法についてのアドバイスは大歓迎です。

ありがとう。

4

3 に答える 3

2

値の生成は、 apply ファミリーの関数を使用してエレガントに行われます。vapplyはあまり知られていませんが、より効率的でsapplyあるため、ここで宣伝します。は、期待されるnumeric(1)結果を指定します。f

# Emulating your function f
f <- function(q, m) runif(1, q, m)

# Generator function
g <- function(n=10, q, m) vapply(seq_len(n), function(i) f(q, m), numeric(1))

# Try it out
q <- 3
m <- 5
v <- g(10, q, m)

# or, if f is defined as above, simplify to:
v <- runif(10, q, m)
于 2012-04-14T22:48:43.593 に答える
1

コードに正確に従ってください:

makeVector <- function(q, m) { 
  v <- c()
  for (i in 1:10) {
    v[i] <- f(q, m)
  }
  v
}

または、よりエレガントに:

makeVector <- function(q, m) sapply(1:10, function(q, m) f(q, m))
于 2012-04-14T22:15:45.327 に答える
0

それはおそらく提供されたソリューションと同等です(そして不足している詳細に完全に対処していません)が、あなたは試しましたか?

Vf <- Vectorize(f)
于 2012-04-15T01:11:22.533 に答える