从列表中提取条目并将每个条目存储在矩阵中

时间:2018-01-02 11:27:52

标签: r list

好的,所以我在R上有以下列表:

seg_sites      list[1000]       List of length 1000
 [[1]]       double [40x162]    00000000000000000000000...
 [[2]]       double [40x150]    11110000000000000000000...
 [[3]]       double [40x160]    00000000111111110000000...
 [[4]]       double [40x93]     00110000000000111100000...
 [[5]]       double [40x144]    00000110000000000110000...
  ...

这个名单还有一千个条目。如您所见,我总是有相同的行数,但每个条目的列数不同。我想要做的是将每个条目提取到一个矩阵。例如,我想创建一个名为" output_1"的矩阵。包含[[1]]条目的信息,然后输出_2与[[2]]条目中的信息,依此类推。

我试图使用for循环:

# Loop to intialize the matrices where I want to store the different entries
for(i in 1:nrep) {
     output_single_i <- matrix(data = NA, nrow = 40, ncol = ncol(single[["seg_sites"]][[i]]))
}

# Loop to actually store the different entries in each matrix 
for(i in 1:nrep) {  
  output_single_i <- matrix(single$seg_sites[[i]], ncol = ncol(single[["seg_sites"]][[i]]))
}

这段代码的作用就是将列表中的最后一个条目保存在名为&#34; output_single_i&#34;的矩阵上。但我不知道如何解决它。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

我们可以使用assign从矩阵列表中创建矩阵数据。矩阵数据保存在全局环境中,您可以使用ls()

进行检查
invisible( lapply(seq_along(mylist), function(x) {
  assign( x = paste0("Output", x), value = mylist[[x]], envir = .GlobalEnv )
  return(TRUE)
  } ))

另一种方法是使用list2env()函数

names(mylist) <- paste0( 'output', seq_along(mylist))
list2env( mylist, envir = .GlobalEnv)

数据:

mylist <- list(matrix(1:10, ncol = 5), matrix(1:10, ncol = 2))
    str(mylist)
    # List of 2
    # $ : int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10
    # $ : int [1:5, 1:2] 1 2 3 4 5 6 7 8 9 10