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 trynew对不起,我又试了一次,效果很好……也许我在电脑前太久了:)那么你的代码有问题,因为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