规则是:for(i in 1:10){v[i]=f(q,m)}
。f(q,m) 是根据输入 q, m 在区间内生成随机输出的函数。'v' 是向量。
以这种方式指定 v 的组件后,我可以输入 v 并返回向量。我想做的是定义一个函数,它接受输入 q,m 并返回向量 v。
原因是最终我希望能够绘制 v 的平均值,范围在变量 q 上。但我认为,我需要一个首先返回 v 的函数。因此,任何有关如何定义此类功能的建议都将不胜感激。
谢谢。
规则是:for(i in 1:10){v[i]=f(q,m)}
。f(q,m) 是根据输入 q, m 在区间内生成随机输出的函数。'v' 是向量。
以这种方式指定 v 的组件后,我可以输入 v 并返回向量。我想做的是定义一个函数,它接受输入 q,m 并返回向量 v。
原因是最终我希望能够绘制 v 的平均值,范围在变量 q 上。但我认为,我需要一个首先返回 v 的函数。因此,任何有关如何定义此类功能的建议都将不胜感激。
谢谢。
使用 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)
完全按照您的代码:
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))
它可能等同于所提供的解决方案(并且没有完全解决缺失的细节),但是您尝试过吗?
Vf <- Vectorize(f)