规则是:for(i in 1:10){v[i]=f(q,m)}
。 f(q,m)是根据输入q,m在间隔中产生随机输出的函数。 'v'是矢量。
在指定v的组件后,我可以输入v,然后返回向量。我希望能够做的是定义一个函数,它接受输入q,m并返回向量,v。
原因是我最终希望能够绘制v的平均值,范围超过变量q。但我认为我需要一个首先返回v的函数。因此,非常感谢任何有关如何定义此类函数的建议。
感谢。
答案 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)