将重复循环的每次迭代保存到向量 - R.

时间:2015-10-04 17:22:03

标签: r loops

我已经查看过以前的帮助帖子,并且没有找到帮助我解决这个问题的东西。我知道for循环可能是生成相同数据的更好方法,但我有兴趣通过重复循环(大多数只是作为练习)来完成这项工作,并且我正在努力解决这个问题。

所以我循环创建了100次rnorm观察的3次迭代,每次从5到25更改为平均值。

i <- 1
repeat{
    x <- rnorm(100, mean = j, sd = 3)
    j <- 5*i 
    i <- i + 4
    if (j > 45) break
    cat(x, "\n",j, "\n")
}

我为每次迭代(总共300个值)获取组合保存输出的所有修改都失败了。救命啊!

3 个答案:

答案 0 :(得分:1)

您可以使用lapply来获取此信息:

lapply(c(5,25,45), function(x){
  rnorm(100, mean = x, sd = 3)
  })

这将为您提供包含3个元素的列表: 每个包含从相应的正态分布中抽取的100个观测值。

答案 1 :(得分:0)

取决于您想要的数据结构。 对于列表,它将是:

r = list()
repeat{

r[[length(r)+1]] = list(x,j)
}

然后:r[[1]][[1]]将为1个循环的x,r [[1]] [[2]]将为j。

答案 2 :(得分:0)

由于您知道要存储多少个观察值,因此可以预先分配该大小的矩阵,并在生成时将数据存储在其中。

# preallocate the space for the values you want to store
x <- matrix(nrow=100, ncol=3)

# save the three means in a vector
j_vals <- c(5,25,45)

# if you really need a repeat loop you can do it like so:
i <- 1
repeat {

    # save the random sample in a column of the matrix x
    x[,i] <- rnorm(100, mean = j_vals[i], sd = 3)

    # print the random sample to the console (you can omit this)
    cat(x[,i], "\n",j_vals[i], "\n")

    i <- i+1
    if (i > 3) break
}

你应该得到一个矩阵x,随机样本存储在列中。您可以访问每个列,例如x[,1]x[,2]等。