我在R中有一个for循环,我想在其中存储每个计算的结果(对于所有循环的值)。在for循环中,调用一个函数,输出暂时存储在变量r中。但是,这会在每个连续循环中被覆盖。我怎么能通过函数存储每个循环的结果并在之后访问它?
谢谢,
例如
for (par1 in 1:n) {
var<-function(par1,par2)
c(var,par1)->var2
print(var2)
因此print会返回var2的每个实例,但是在var2中只保存了最后一个n的值。有没有办法获取数据的数组或什么?
答案 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