如何生成变量名(i,j)列表,然后为其赋值,尤其是双下标(使用R)

如何生成变量名(i,j)列表,然后为其赋值,尤其是双下标(使用R),r,R,我想知道是否有一种简单的方法可以使用for循环生成变量列表,并给出其值 这里我尝试生成A11、A12、A13、A14、A21、A22、A23、A24、A31、A32、A33、A34、A41、A42、A43、A44,并分配一个6乘6的矩阵。然后我想做一些计算 下面是代码的一部分。如何简化它。(使用R) 对于(1:4中的i){分配(粘贴(“A”,i,sep=”“),矩阵(0,6,6))} 对于(1:4中的i){分配(粘贴(“A1”,i,sep=”“),矩阵(0,6,6));A11;A12;A13;A

我想知道是否有一种简单的方法可以使用for循环生成变量列表,并给出其值

这里我尝试生成A11、A12、A13、A14、A21、A22、A23、A24、A31、A32、A33、A34、A41、A42、A43、A44,并分配一个6乘6的矩阵。然后我想做一些计算

下面是代码的一部分。如何简化它。(使用R)

对于(1:4中的i){分配(粘贴(“A”,i,sep=”“),矩阵(0,6,6))}
对于(1:4中的i){分配(粘贴(“A1”,i,sep=”“),矩阵(0,6,6));A11;A12;A13;A14
对于(1:4中的i){分配(粘贴(“A2”,i,sep=”“),矩阵(0,6,6));A21;A22;A23;A24
对于(1:4中的i){分配(粘贴(“A3”,i,sep=”“),矩阵(0,6,6));A31;A32;A33;A34
对于(1:4中的i){分配(粘贴(“A4”,i,sep=”“),矩阵(0,6,6));A41;A42;A43;A44
适用于(i/1:nrow(X)){

p简化此代码的一种方法是停止使用名为
A1
A2
等变量

相反,您可以创建列表列表:

A <- list()

# Initalize sub-lists
for (i in 1:4) {
    A[[i]] <- list()
}
但你可以做得更好!看看这里发生了什么:

A <- matrix(list(), 4, 4)
A <- replicate(4, list())
A[[1]][[1]] <- matrix(0,6,6))
A <- matrix(list(), 4, 4)
A[[1,1]] <- matrix(0,6,6))
for (i in 1:nrow(X)) {
  A11<-(A11-as.numeric(p[,1]*(1-p[,1]))*(as.matrix(X[i,]))%*%t(as.matrix(X[i,])))
  A22<-(A22-as.numeric(p[,2]*(1-p[,2]))*(as.matrix(X[i,]))%*%t(as.matrix(X[i,])))
  A33<-(A33-as.numeric(p[,3]*(1-p[,3]))*(as.matrix(X[i,]))%*%t(as.matrix(X[i,])))
  A44<-(A44-as.numeric(p[,4]*(1-p[,4]))*(as.matrix(X[i,]))%*%t(as.matrix(X[i,])))
}
for (i in 1:nrow(X)) {
  xi <- as.matrix(X[i,])
  xi_norm <- xi %*% t(xi)
  for (k in 1:4) {
    A[[k, k]] <-(A[[k, k]] - as.numeric(p[,k]*(1-p[,k])) * xi_norm
  }
}
bind_A_row <- function(row_index) {
  do.call(rbind, A[row_index, ])
}

A_rows <- lapply(1:4, bind_A_row)
A <- do.call(cbind, A_rows)