从R中的replicate函数将值转换为向量

wydwbb8l  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(112)

我尝试多次复制一个函数,在每次迭代结束时,向一个向量添加一个值,这样在复制结束时,我就有了一个向量,其中的条目可以取其平均值。
这是我的代码

  1. z <- vector()
  2. n <- 1000
  3. maxrep <- replicate(3, {
  4. print(paste0("z0: ", z))
  5. stop <- FALSE
  6. plot(NULL, xlim=c(0.001,1000), ylim=c(0.001,4), ylab="unif value", xlab="n=1000")
  7. y <- runif(1000, 0, theta)
  8. for (i in 1:1000) {
  9. thetamax <- max(y[1:i])
  10. points(i, thetamax)
  11. if (thetamax >= 2.9 & stop == FALSE) {
  12. #print(paste0(i, ": ", thetamax))
  13. num <- i
  14. stop <- TRUE
  15. }
  16. }
  17. z <- append(z, num)
  18. print(paste0("z1: ", z))
  19. })

我想给z加上一个值,但是每次replicate函数重复它自己的时候,由于某种原因,z又变成了一个空向量,加上的值就消失了。我该如何解决此问题?谢谢你,谢谢

jk9hmnmh

jk9hmnmh1#

正如我所说的,它是maxrep包含的值,而不是num。变量num只存在于调用replicate中,而不存在于全局环境中。
下面是代码的工作版本(为了清晰起见,我删除了绘图和打印):

  1. n <- 1000
  2. theta <- 3 # you didn't define this, so I'm guessing
  3. maxrep <- replicate(3, {
  4. Stop <- FALSE
  5. y <- runif(n, 0, theta)
  6. for (i in seq_len(n)) {
  7. thetamax <- max(y[1:i])
  8. if (thetamax >= 2.9 & !Stop) {
  9. num <- i
  10. Stop <- TRUE
  11. }
  12. }
  13. # what if the stop condition was never satisfied? What should num be? n?
  14. if (!Stop) num <- n
  15. return(num)
  16. })
  17. maxrep

maxrep将包含值,例如[1] 11 27 60

展开查看全部

相关问题