首页 > 解决方案 > 根据每个元素的平方和排列向量列表

问题描述

x <- list(c(1,2), c(1,4), c(1,1))

我想根据每个向量元素的平方和来排列列表的向量。

三个向量的平方和:

1^2 + 2^2 = 5,

1^2 + 4^2 = 17,

1^2 + 1^2 = 2.

由于,2 < 5 < 17,所需的输出将是:

   vectors   squaresum
    c(1,1)    2

    c(1,2)    5

    c(1,4)    17

我正在考虑为平方和构建一个函数。然后使用该函数对向量进行排序。但无法正常进行。任何帮助都会得到帮助。

标签: rlistsorting

解决方案


您可以遍历列表以计算每个向量的平方和,并用于order()按升序获取值的索引。然后,您可以使用它们对您的初始列表进行排序x

x[order(sapply(x, function(v) sum(v ** 2)))]

结果是:

[[1]]
[1] 1 1

[[2]]
[1] 1 2

[[3]]
[1] 1 4

推荐阅读