如何将一个过程重复 N 次?

Posted

技术标签:

【中文标题】如何将一个过程重复 N 次?【英文标题】:How to repeat a process N times? 【发布时间】:2015-01-13 08:29:14 【问题描述】:

我有:

x = rnorm(100)
# Partie b
z = rbinom(100,1,0.60)
# Partie c
y = 1.4 + 0.7*x - 0.5*z
# Partie d
x1 = abs(x)
y1 = abs(y)
Don<-cbind(y1,x1,z)

Don1 <- data.frame(Don)
Reg <- glm(y1~x1+z,family=poisson(link="log"),Don1)

# Partie e
#Biais de beta
Reg.cf <- coef(Reg)
biais0 = Reg.cf[1] - 1.4
biais1 = Reg.cf[2] - 0.7
biais2 = Reg.cf[3] + 0.5

我需要重复这 100 次以获得不同的系数并计算偏差,然后将每个偏差的平均值放入文本文件中。

我不知道如何实现我教过的repeatif()break; 但是我该怎么做呢?我尝试了循环,但没有成功。

【问题讨论】:

或许看看replicate函数。 当我这样做时,R 运行时间过长我仍在等待答案 转义键或 ctrl-C 应该允许您中断进程。为了回答您的问题......我们看不到您的屏幕,所以我们不知道您做了什么。 【参考方案1】:

我倾向于这样做。

get.bias <- function(i)   # the argument i is not used
  x <- rnorm(100)
  z <- rbinom(100,1,0.60)
  y <- 1.4 + 0.7*x - 0.5*z
  df <- data.frame(y1=abs(y), x1=abs(x), z)
  coef(glm(y1~x1+z,family=poisson(link="log"),df)) - c(1.4,0.7,-0.5)


set.seed(1)   # for reproducible example; you may want to comment out this line  
result <- t(sapply(1:100,get.bias))
head(result)
#      (Intercept)         x1           z
# [1,]   -1.129329 -0.4992925 0.076027012
# [2,]   -1.205608 -0.5642966 0.215998775
# [3,]   -1.089448 -0.5834090 0.081211412
# [4,]   -1.206076 -0.4629789 0.004513795
# [5,]   -1.203938 -0.6980701 0.201001466
# [6,]   -1.366077 -0.5640367 0.452784690

colMeans(result)
# (Intercept)          x1           z 
#  -1.1686845  -0.5787492   0.1242588 

sapply(list,fun) 将列表元素“应用”到函数;例如它为列表中的每个元素调用一次函数,并将结果组合成一个矩阵。所以这里get.bias(...)会被调用100次,每次返回的结果都会被组装成一个矩阵。这个矩阵对于每个结果都有一个,但是我们希望结果在行中每个参数有一列,所以我们用t(...)进行转置。

【讨论】:

以上是关于如何将一个过程重复 N 次?的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中重复一个字符串N次?

给定一个整数数组,其中一些数字重复1次或2次但一次重复3次,你如何找到它?

创建重复N次的单项列表

排序算法(冒泡-选择-插入-希尔-快速-归并)

如何在 Perl 中重复 N 次字符串?

迭代器