R语言 创建一个循环,其中包含矩阵10 X 4的乘法

vlju58qv  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(172)

我有下面的R代码来生成100个随机权重

# Creating a matrix to store the weights
all_wts <- matrix(nrow = 100,
 ncol = length(tickers))  ### number of tickers 4                   

# run the for loop 100 times.
for (i in 1:100) {
  wts <- runif(length(tickers))
  wts <- wts/sum(wts)

# Storing weight in the matrix
  all_wts[i,] <- wts }

因此,我应该有一个权重矩阵$$ w= \开始{bmatrix} w_1和w_2和w_3和w_4 \ \虚拟点和\虚拟点和\虚拟点\虚拟点和\虚拟点和\虚拟点和\虚拟点\ \结束{bmatrix}$$
其中第一行$$ w^* = \开始{bmatrix} w1&w2&w3&w4\结束{bmatrix} $$是第一组随机权重,等等。
现在,我的第二步是将第一组随机权重乘以另一个名为$$R_t $$的矩阵,其中$$R_t = \开始{bmatrix} A_1 & A_2 & A_3 & A_4 \ \vdots &\vdots &\vdots \ A_{1,252}& A_{2,252}& A_{3,252}& A_{4,252} \ \end{bmatrix}$$代码将为

a1 <- all_wts[1,] 

b <- log.return

yts <-  rowSums(a1 * b)

然后我用第二个随机权重重复这个乘法

a2 <- all_wts[2,] 

b <- log.return

yts2 <- rowSums(a2*b)

我对所有100个随机权重都这样做,我的问题是,我如何编写一个代码来实现每个随机权重的所有乘法,然后将第二步的结果存储到一个新的矩阵中,这样我就可以移动到需要第二步结果的第三步。
我设法做了计算,但迭代次数更多,例如100次,将很难重复该过程

jqjz2hbq

jqjz2hbq1#

让我们来没有循环:

ncol = 4
nrow = 100
n = ncol * nrow

all_wts = matrix(
  rnorm(n), nrow = nrow
)
all_wts = all_wts / rowSums(all_wts)

results = apply(all_wts, MARGIN = 1, \(x) rowSums(x * log.return))

由于您没有提供log.return的任何示例数据,因此没有对此进行测试,但它应该可以工作。默认情况下,apply会尝试将结果简化为向量或矩阵,但如果方便的话,您可以添加参数simplify = FALSE以获得list的结果。

相关问题