r - 列表元素名称的问题

标签 r list names

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

    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)
})

如果你想组装这个矩阵列表,就像使用 cbind 一样,我建议你只使用一个大的 n 值,而不是其中包含 rep 的 lapply。

此外,我打赌有更简单的方法来模拟这些场景,但在不知道代码片段上下文的情况下很难估计。

此外,尝试用一个最小的示例来解决您的问题,使用 100 个 5*10 的 32 个矩阵的列表有点困惑!

祝你好运!

关于r - 列表元素名称的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71063070/

相关文章:

r - 绘图回归线 R

r - 保存 Shiny session 的安全方法?

python - 从数组中删除列表符号

MySQL:如何在 MySQL 查询中传递列名作为参数

r - 在将向量从二进制强制转换为as.numeric时保留名称?

RColorBrewer Treemap 包 R,为中性值更改颜色?

python - Python 列表中第一次出现零的索引

c# - IComparer无法正常工作

R:读取变量中的列名的csv

r - 如何通过保持 id 的完整性将 df 分成更小的部分