我有3组名为minDist的列表。每个列表有三列,因此它有三个组(1,2和3)。
minDist:
[[1]]
[,1] [,2] [,3]
[1,] 1.000000 9.055385 9.000000
[2,] 0.000000 9.000000 9.055385
[3,] 1.414214 8.062258 8.000000
[4,] 1.000000 8.000000 8.062258
[5,] 9.055385 1.000000 0.000000
[6,] 9.000000 0.000000 1.000000
[7,] 10.049876 1.414214 1.000000
[8,] 10.000000 1.000000 1.414214
[9,] 5.000000 5.830952 6.403124
[10,] 5.656854 6.403124 7.071068
[[2]]
[,1] [,2] [,3]
[1,] 10.000000 10.049876 9.055385
[2,] 10.049876 10.000000 9.000000
[3,] 9.000000 9.055385 8.062258
[4,] 9.055385 9.000000 8.000000
[5,] 1.000000 1.414214 1.000000
[6,] 1.414214 1.000000 0.000000
[7,] 0.000000 1.000000 1.414214
[8,] 1.000000 0.000000 1.000000
[9,] 7.211103 6.708204 5.830952
[10,] 7.810250 7.211103 6.403124
[[3]]
[,1] [,2] [,3]
[1,] 0.000000 1.000000 9.055385
[2,] 1.000000 1.414214 9.000000
[3,] 1.000000 0.000000 8.062258
[4,] 1.414214 1.000000 8.000000
[5,] 9.000000 8.000000 1.000000
[6,] 9.055385 8.062258 0.000000
[7,] 10.000000 9.000000 1.414214
[8,] 10.049876 9.055385 1.000000
[9,] 5.656854 5.000000 5.830952
[10,] 6.403124 5.830952 6.403124
我想知道哪一行属于同一组。例如,清单1:
[1] 1 1 1 1 3 2 3 2 1 1
含义第1,2,3,4,9和10行属于第1组,第6行和第8行属于第2组第5行,第7行属于第3组。
如果我只有一个列表,这就是我尝试进行分组的方式:
grouping <- apply(minDist, 1, which.min)
如何使用循环获取所有三个列表的答案?
答案 0 :(得分:6)
尝试:
lapply(minDist, function(x) max.col(-x))
不要使用效率极低的apply(x,1,which.min)
;改为使用max.col
,它为矩阵的每一行返回最大值的索引(如果你想要最小值,你只需要找到x
的最大值)。
答案 1 :(得分:2)
我们可以使用lapply
循环遍历list
元素,然后执行apply
lapply(minDist, function(x) apply(x, 1, which.min))