将随机数添加到向量的末尾

时间:2015-09-03 05:34:57

标签: r function for-loop random

我试图重复计算随机向量的中位数,构建所有中位数的向量。为什么我从下面的代码中得到NULL结果,我在其中重复计算中位数并将其添加到向量m的末尾?

medainfunc<-function(n,mu,sigma,iterate){
  m<-c()
  for (i in itreate){
    x<-rnorm(n,mu,sigma)
    y<-median(x)
    m<-c(m,y)
  }
  m
}
medianfunc(10,3,15,10000)
NULL

3 个答案:

答案 0 :(得分:3)

我们在OP代码中有多个拼写错误,即iterateitreate并且在原始函数为medainfunc时调用medianfunc。另外,我们只为“迭代”提供单个输入值,因此我们可能希望在函数内部使用seq(iterate。否则,我们得到一个单值输出。

medianfunc<-function(n,mu,sigma,iterate){
  m<-c()
  for (i in seq(iterate)){
    x<-rnorm(n,mu,sigma)
    y<-median(x)
    m<-c(m,y)
  }
  m
}

set.seed(25)
medianfunc(10,3,15, 5)
#[1]  0.9770646 -6.4852741  4.6768291 -6.4167869  5.3176253

这可以通过获得rnorm的&#39; n *迭代&#39;来进行矢量化。值。将其转换为matrix并使用colMedians中的library(matrixStats)

medianfunc1 <- function(n, mu, sigma, iterate){
  m1 <- matrix(rnorm(n*iterate, mu, sigma), ncol=iterate)
  library(matrixStats)
  colMedians(m1)
}

set.seed(25)
medianfunc1(10,3,15, 5)
#[1]  0.9770646 -6.4852741  4.6768291 -6.4167869  5.3176253

答案 1 :(得分:2)

逐个构建向量既低效(参见the R inferno的第二个圆圈)又是代码密集型的。相反,您可以使用replicate函数在一行代码中重复一次随机操作:

medianfunc <- function(n, mu, sigma, iterate) {
  replicate(iterate, median(rnorm(n, mu, sigma)))
}
set.seed(25)
medianfunc(10,3,15, 5)
# [1]  0.9770646 -6.4852741  4.6768291 -6.4167869  5.3176253

答案 2 :(得分:0)

我不知道这只是你在帖子上写的代码,但函数被称为medainfunc,然后在你的代码上调用medianfunc。这可能只是一个错误,我注意到的另一件事是你应该添加return 在你的功能结束时如此:

medainfunc<-function(n,mu,sigma,iterate){
   m<-c()
   for (i in itreate){
     x<-rnorm(n,mu,sigma)
     y<-median(x)
     m<-c(m,y)
     }
   return(m)
   }