将函数应用于矩阵的每个值

时间:2016-05-29 21:36:11

标签: r loops matrix

我有一个矩阵pmatrix

sigma = 0.03
alpha = 0.01
sims = 6
N = 10
pmatrix = matrix(NA, ncol=sims, nrow = N)
for (i in 1:N){
x = rnorm(sims)
pmatrix[i,] <- x
}

我需要使用此矩阵才能从以下表达式中获取xt值:

xt = 0
for (i in 1:10){     
xt[i+1] = xt[i] * exp(-alpha*1) + sqrt(((sigma^2)/2*alpha)*(1-exp(-2*alpha*1)))*pmatrix[i]
  }

然而,以下循环仅返回xt向量。理想情况下,我想获得一个由10行(N年)和6列(sims - 模拟场景的数量)组成的矩阵。 我相信它可以通过第二个循环或应用函数来实现。

2 个答案:

答案 0 :(得分:2)

希望这适合你。有时,它更容易在列或行索引上使用$('a[href=#secondPage\\/2]').on('click',function(event){ event.preventDefault(); }); 函数而不是数据对象本身。

apply

答案 1 :(得分:1)

正如延伸评论一样:您面临的问题来自于您错误地对xt进行了分类。如果您想在行矩阵上执行某些操作,请使用整行,您可以使用xt[1,]而不是xt[1]来检索整行。参见:

sigma = 0.03; alpha = 0.01; sims = 6; N = 10
pmatrix = matrix(rnorm(sims*N), ncol=sims, nrow = N)
xt <- matrix(0, ncol=sims, nrow = N)

xt[1] # just one element
[1] 0
xt[1,] # entire row
[1] 0 0 0 0 0 0

然后它也适用于您的方法:

for(i in 2:N){
  xt[i,] <- xt[i-1,] * exp(-alpha) + sqrt(((sigma^2)/2*alpha)*(1-exp(-2*alpha)))*pmatrix[i-1,]
}

head(xt)
            [,1]          [,2]         [,3]          [,4]         [,5]         [,6]
[1,] 0.0000000000  0.000000e+00 0.0000000000  0.000000e+00 0.000000e+00 0.0000000000
[2,] 0.0005102757  9.680876e-05 0.0006264992  2.147689e-05 9.432744e-05 0.0004370840
[3,] 0.0005035357 -4.704802e-04 0.0003954507 -5.083994e-04 4.237845e-04 0.0004007277
[4,] 0.0009345963 -2.699634e-04 0.0003559880 -3.877696e-04 5.337181e-04 0.0005230792
[5,] 0.0016501564 -1.947569e-04 0.0005003010 -6.680216e-05 6.098233e-04 0.0007106022
[6,] 0.0015317653  4.316999e-04 0.0011361772 -2.209149e-04 6.881100e-04 0.0005893373