r-创建一个循环,其中包含一个矩阵10X4的乘积



我有以下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=\beargin{bmatrix}w_ 1&w_ 2&w_3&w_4\\vdots&\vdots&\vdots&\vdots\\vdots&\vdots&\vdots&\vdots\\end{bmatrix}$$

其中第一行$$w^*=\开始{bmatrix}w1&w2&w3&w4\end{bmatrix}$$是第一组随机权重等。

现在,我的第二步是将第一组随机权重与另一个名为$$R_t$$的矩阵相乘,其中$$R_t=\begin{bmatrix}A_1&A_2&A_3&A_4\\vdots&\vdots&\vdots&\vdots\A_{1252}&A_{2252}&A_{3252}&A_{4252}\\结束{bmatrix}$$代码将是

a1 <- all_wts[1,] 
b <- log.return
yts <-  rowSums(a1 * b)

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

a2 <- all_wts[2,] 
b <- log.return
yts2 <- rowSums(a2*b)

我对所有100个随机权重都这样做。我的问题是,我如何写一个代码来实现每个随机权重的所有乘法,然后将步骤2的结果存储在一个新的矩阵中,这样我就可以进入第三步,这需要步骤2的成果。

我设法进行了计算,但随着迭代次数的增加,例如100次,将很难重复过程

让我们不要循环:

ncol = 4
nrow = 100
n = ncol * nrow
all_wts = matrix(
runif(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

最新更新