Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用中的循环生成动态数组结构,然后将其转换为静态数组_R - Fatal编程技术网

R 使用中的循环生成动态数组结构,然后将其转换为静态数组

R 使用中的循环生成动态数组结构,然后将其转换为静态数组,r,R,我想根据我选择的状态数量动态参数化状态空间模型的数组 我用一个循环来做这个- Q <- function(params,states) { qmat <- matrix(0,statespace,statespace) for (i in 1:statespace) qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2], params[(i-1)

我想根据我选择的状态数量动态参数化状态空间模型的数组

我用一个循环来做这个-

Q <- function(params,states) {
qmat <- matrix(0,statespace,statespace)
for (i in 1:statespace)
  qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2], 
                            params[(i-1)*5+3],states[i])          
qmat            

}
statshockvar
-在这个特定示例中,是期限结构的CIR模型的离散化方差

编辑2-

参数看起来像这样-请注意,这些只是任意数

params = c(
0.3275,
0.07,
0.197,
0,
0.05,

0.01,
0.2,
0.3,
0,
0.05,

0.01,
0.1,
0.3,
0,
0.05)
州会是这样的-

states = c(0.07,0.07,0.07)
同样,这些国家是武断的

这里有一个解决方案:

Q <- function(params, states) {
  diag(mapply(function(y, z) statshockvar(y[1], y[2], y[3], z), 
              lapply(seq(statespace), function(x) params[(x-1)*5 + 1:3]), 
              states))
}

看看for循环

for (i in 1:statespace)
  qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2], 
                            params[(i-1)*5+3],states[i])

如果不是,请参见?矢量化,使其成为

Sven,如果状态由上面提到的statespace变量确定,这是否有效?也就是说,这决定了状态向量的长度…@user2006864变量
statespace
是解决方案的一部分:
lapply(seq(statespace)…
。但是,我仍在想-如何阻止r在每次调用函数q时重新分配矩阵结构?@user2006864该函数旨在创建矩阵。您希望函数做什么?@user2006864我不知道您的优化过程。您原来的函数创建矩阵,但不更改val在现有矩阵中使用。如果要进一步改进算法,则应就此主题提出另一个问题。此函数将被多次调用,例如1500*优化次数。这是为每次调用不断重新分配矩阵结构的主要瓶颈。因此,我希望此函数运行一次,然后仅更新参数值,它将在预定义的矩阵结构中产生一组新的值…`让函数从全局环境中获取数据(
statespace
)不是一个好主意。应该将其作为参数传递。
Q(params, states)

            [,1]       [,2]        [,3]
[1,] 0.002465305 0.00000000 0.000000000
[2,] 0.000000000 0.03424762 0.000000000
[3,] 0.000000000 0.00000000 0.009499883
for (i in 1:statespace)
  qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2], 
                            params[(i-1)*5+3],states[i])
diag(qmat) <- statshockvar(params[((1:statespace)-1)*5+1], params[((1:statespace)-1)*5+2], params[((1:statespace)-1)*5+3], states[1:statespace])