我已根据某个规则定义了一个向量。如何定义输出向量的函数?

时间:2012-04-14 22:05:19

标签: r

规则是:for(i in 1:10){v[i]=f(q,m)}。 f(q,m)是根据输入q,m在间隔中产生随机输出的函数。 'v'是矢量。

在指定v的组件后,我可以输入v,然后返回向量。我希望能够做的是定义一个函数,它接受输入q,m并返回向量,v。

原因是我最终希望能够绘制v的平均值,范围超过变量q。但我认为我需要一个首先返回v的函数。因此,非常感谢任何有关如何定义此类函数的建议。

感谢。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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))

答案 2 :(得分:0)

它可能相当于提供的解决方案(并没有完全解决缺失的细节),但你试过吗?

Vf <- Vectorize(f)