R 如何从列表中提取矩阵对象而不再是列表?

R 如何从列表中提取矩阵对象而不再是列表?,r,list,matrix,R,List,Matrix,我想从矩阵列表中提取一个矩阵。然而,这个提取的矩阵不应该再是一个列表了。这可能很容易做到,但我找不到解决办法。以下是一些示例数据: x = list(a = matrix(sample(1:5,4) , nrow=2, ncol=2), b = matrix(sample(5:10,4) , nrow=2, ncol=2), c = matrix(sample(10:15,4) , nrow=2, ncol=2)) 我按名称选择了一个矩阵(这在我的案例中

我想从矩阵列表中提取一个矩阵。然而,这个提取的矩阵不应该再是一个列表了。这可能很容易做到,但我找不到解决办法。以下是一些示例数据:

x = list(a = matrix(sample(1:5,4) , nrow=2, ncol=2),
         b = matrix(sample(5:10,4) , nrow=2, ncol=2),
         c = matrix(sample(10:15,4) , nrow=2, ncol=2))  
我按名称选择了一个矩阵(这在我的案例中很重要,因为我有1000多个矩阵),但它仍然是一个项目列表:

new <- x["b"]

new您可以使用
x[['b']
x$b

x = list(a = matrix(sample(1:5,4) , nrow=2, ncol=2),
         b = matrix(sample(5:10,4) , nrow=2, ncol=2),
         c = matrix(sample(10:15,4) , nrow=2, ncol=2))  

x[['b']]
     [,1] [,2]
[1,]    6   10
[2,]    9    7

x$b
     [,1] [,2]
[1,]    6   10
[2,]    9    7
以下是两种解决方案之间的
microbenchmark

microbenchmark(x[['b']],x$b)
Unit: nanoseconds
     expr min  lq   mean median   uq   max neval cld
 x[["b"]] 351 701 756.80    701  701  3851   100   a
      x$b 700 701 942.33    701 1050 15400   100   a

R中有两种常见的子集设置操作
?“[”
?“[[”
。它们之间的区别在于
[
以与“父”对象相同的类型返回子集,在您的例子中是列表,而
[
以子集对象的类型返回对象

因此:


l try
new对不起,我又试了一次,效果很好……也许我在电脑前太久了:)那么你的代码有问题,因为
x['b']]
是正确的答案,你应该检查一下你的列表名称。你可能会从阅读
帮助(“[”
中受益。
l <- list(v= 1:10, # a vector
          m= matrix(1:4, 2,2), # a matrix
          l2= list(a= c("a", "b", "c"), b= c("d", "e", "f")))

l[1] # all of these will return
l[2] # a list of length one
l[3] # containing the object in the list "l"

l[[1]] # will return a vector
l[[2]] # will return a matrix
l[[3]] # will return a list