将值存储在For循环中

时间:2013-11-22 21:23:36

标签: r loops

我在R中有一个for循环,我想在其中存储每个计算的结果(对于所有循环的值)。在for循环中,调用一个函数,输出暂时存储在变量r中。但是,这会在每个连续循环中被覆盖。我怎么能通过函数存储每个循环的结果并在之后访问它?

谢谢,

例如

for (par1 in 1:n) {
var<-function(par1,par2)
c(var,par1)->var2
print(var2)

因此print会返回var2的每个实例,但是在var2中只保存了最后一个n的值。有没有办法获取数据的数组或什么?

2 个答案:

答案 0 :(得分:4)

初始化一个空对象,然后通过索引

指定值
a <- 0
for (i in 1:10) {
     a[i] <- mean(rnorm(50))
}

print(a)

编辑:

要包含两个输出变量的示例,在最基本的情况下,创建一个空矩阵,其列数对应于输出参数以及与迭代次数匹配的行数。然后通过索引for循环中的行位置将输出保存在矩阵中:

n <- 10
mat <- matrix(ncol=2, nrow=n)

for (i in 1:n) {
    var1 <- function_one(i,par1)
    var2 <- function_two(i,par2)
    mat[i,] <- c(var1,var2)
}

print(mat)

迭代编号i对应于mat对象中的行编号。所以没有必要明确地跟踪它。

但是,这只是为了说明基础知识。一旦理解了上述内容,使用@eddi提供的优雅解决方案会更有效,特别是在处理许多输出变量时。

答案 1 :(得分:0)

获取结果列表:

n = 3
lapply(1:n, function(par1) {
  # your function and whatnot, e.g.
  par1*par1
})

sapply如果你想要一个矢量。

有点复杂的例子:

n = 3
some_fn = function(x, y) { x + y }

par2 = 4
lapply(1:n, function(par1) {
  var = some_fn(par1, par2)
  return(c(var, par1))  # don't have to type return, but I chose to make it explicit here
})
#[[1]]
#[1] 5 1
#
#[[2]]
#[1] 6 2
#
#[[3]]
#[1] 7 3