列表元素名称的问题

Problems with the names of the elements of a list

我创建了一个列表,其元素本身就是一个矩阵列表。我希望能够提取每个变量的观察向量

    p13 = 0.493;p43 = 0.325;p25 = 0.335;p35 = 0.574;p12 = 0.868 
    std_e2 = sqrt(1-p12^2) 
    std_e3 = sqrt(1-(p13^2+p43^2)) 
    std_e5 = sqrt(1-(p25^2+p35^2+2*p25*p35*(p13*p12)))
    set.seed(1234)
    z1<-c(0,1)
    z2<-c(0,1)
    z3<-c(0,1)
    z4<-c(0,1)
    z5<-c(0,1)
    s<-expand.grid(z1,z2,z3,z4,z5); s
    s<-s[-1,];s
    shift<-3
    scenari<-s*shift;scenari
    scenario_1<-scenari[1];scenario_1
    genereting_fuction<-function(n){
      sample<-list()
      for (i in 1:nrow(scenario_1)){
        X1=rnorm(n)+scenari[i,1]
        X4=rnorm(n)+scenari[i,4]
        X2=X1*p12+std_e2*rnorm(n)+scenari[i,2]
        X3=X1*p13+X4*p43+std_e3*rnorm(n)+scenari[i,3]
        X5=X2*p25+X3*p35+std_e5*rnorm(n)+scenari[i,5]
        sample[[i]]=cbind(X1,X2,X3,X4,X5)
        colnames(sample[[i]])<-c("X1","X2","X3","X4","X5")
      }
      sample
    } 
    set.seed(123)
    dati_fault<- lapply(rep(10, 100), genereting_fuction)

     dati_fault[[1]]
    [[1]]
                X1       X2        X3         X4         X5
     [1,] 2.505826 1.736593 1.0274581 -0.6038358  1.9967656
     [2,] 4.127593 3.294344 2.8777777  1.2386725  3.0207723
     [3,] 1.853050 1.312617 1.1875699  0.5994921  1.0471564
     [4,] 4.481019 3.330629 2.1880050 -0.1087338  2.7331061
     [5,] 3.916191 3.306036 0.7258404 -1.1388570  1.0293168
     [6,] 3.335131 2.379439 1.2407679  0.3198553  1.6755424
     [7,] 3.574675 3.769436 1.1084120 -1.0065481  2.0034434
     [8,] 3.203620 2.842074 0.6550587 -0.8516120 -0.1433508
     [9,] 2.552959 2.642094 2.5376430  2.0387860  3.5318055
    [10,] 2.656474 1.607934 2.2760391 -1.3959822  1.0095796

我只想将X1 的元素保存在对象中,其他变量也是如此。 .

这里有一个矩阵列表,其中行和 n 列是场景。

genereting_fuction <- function(n, scenario, scenari){ 
  # added argument because you assume global variable use
  nr <- nrow(scenario)
  sample <- vector("list", length = nr) # sample<-list() 
  # creating a list is better than expanding it each iteration
  for (i in 1:nr){
    X1=rnorm(n)+scenari[i,1]
    X4=rnorm(n)+scenari[i,4]
    X2=X1*p12+std_e2*rnorm(n)+scenari[i,2]
    X3=X1*p13+X4*p43+std_e3*rnorm(n)+scenari[i,3]
    X5=X2*p25+X3*p35+std_e5*rnorm(n)+scenari[i,5]
    sample[[i]]=cbind(X1,X2,X3,X4,X5)
    colnames(sample[[i]])<-c("X1","X2","X3","X4","X5")
  }
  sample
} 

set.seed(123)
dati_fault<- lapply(rep(3, 2), function(x) genereting_fuction(x, scenario_1, scenari))
dati_fault


lapply(dati_fault, function(x) {
  tmp <- lapply(x, function(y) y[,"X1"])
  tmp <- do.call(rbind, tmp)
})

如果你想 assemble 这个矩阵列表,比如使用 cbind,我建议你只使用一个大的 n 值而不是 lapply 和 rep里面。

另外我敢打赌有更简单的方法来模拟这个场景数量,但是如果不知道代码片段的上下文就很难估计。

另外,尝试用一个最小的例子来解决你的问题,使用 5*10 的 32 矩阵的 100 列表有点混乱!

祝你好运!