如何从列表中的每个矩阵中获取矩阵中每行的最大值的colname?

时间:2013-07-31 00:59:38

标签: r

我希望主题清楚明确......我有一个矩阵列表。在每个矩阵中,我想要一个列名称的向量,其中包含行的最大值。实际上是这些载体的列表。简单的例子:

a = c(1,1,3)
b = c(7,2,1)
c = c(2,4,2)

d1 = cbind(a,b,c)

d = c(2,1,6)
e = c(1,4,2)
f = c(4,8,4)

d2 = cbind(d,e,f)

l = list(d1,d2)

l
[[1]]
     a b c
[1,] 1 7 2
[2,] 1 2 4
[3,] 3 1 2

[[2]]
     a b c
[1,] 2 1 4
[2,] 1 4 8
[3,] 6 2 4

我很接近..这让我得到了最大值的索引:

lapply(l,function(y) apply(y, 1, function(x) which (x==max(x))))
[[1]]
[1] 2 3 1

[[2]]
[1] 3 3 1

但这就是我能够获得列名称的全部内容:

lapply(l,function(y) apply(y, 1, function(y) colnames(y)[function(x) which (x==max(x))]))
[[1]]
NULL

[[2]]
NULL

我寻求的是:

[[1]]
[1] 'b', 'c', 'a'

[[2]]
[1] 'c', 'c', 'a'

在更简单的表达式中,colnames(matrixFrameName)[expression returning indexes]按照我的预期工作;不是在这种情况下。有人可以帮忙吗? THX ...

1 个答案:

答案 0 :(得分:4)

尝试:

lapply(l,function(y) colnames(y)[apply(y, 1, which.max)])

## [[1]]
## [1] "b" "c" "a"
## 
## [[2]]
## [1] "f" "f" "d"