【问题标题】:I have defined a vector according to a certain rule. How do I define a function that outputs the vector?我已经按照一定的规则定义了一个向量。如何定义输出向量的函数?
【发布时间】:2012-04-26 19:34:42
【问题描述】:

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

以这种方式指定 v 的组件后,我可以输入 v 并返回向量。我想做的是定义一个函数,它接受输入 q,m 并返回向量 v。

原因是最终我希望能够绘制 v 的平均值,范围在变量 q 上。但我认为,我需要一个首先返回 v 的函数。因此,我们将不胜感激有关如何定义此类功能的任何建议。

谢谢。

【问题讨论】:

  • runif 已经做你想做的事了吗?
  • 欢迎来到 Stack Overflow。当您提出问题时,它有助于为我们提供一个最少可重现的示例,如(HERE) 所述。当您提供代码时,您应该定义一切是什么,因为我们不知道 f 是什么。这使您的问题对其他搜索线程的人有用,而不仅仅是针对您。它也有助于给我们一个输出应该是什么的例子。

标签: r


【解决方案1】:

使用 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)

【讨论】:

    【解决方案2】:

    完全按照您的代码:

    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))
    

    【讨论】:

      【解决方案3】:

      它可能等同于提供的解决方案(并且没有完全解决缺失的细节),但您尝试过吗?

      Vf <- Vectorize(f)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-27
        相关资源
        最近更新 更多