R语言实现name_sort函数:按数值降序返回对应名称
实现按values降序排序对应names的R函数
我想写一个名为name_sort的函数,接收names和values两个参数,要求按照values的降序返回对应的names。比如当values是c(3,2,1)时,要返回c("A","B","C")。我刚接触R语言,不确定要不要用if语句,希望得到帮助。我期望的函数起始语句是:
names_sort <- function(values, names) {
预期输入输出示例:
调用names_sort(c(3,1,2), c("A","B","C"))应该返回:
[1] "A" "C" "B"
完全不需要用if语句,R里的order()函数就能轻松搞定排序需求。直接通过获取values降序的索引,再用这个索引去提取对应的names即可。
完整的函数代码如下:
names_sort <- function(values, names) { # 生成values降序排列的索引 sorted_indices <- order(values, decreasing = TRUE) # 根据索引提取对应的names names[sorted_indices] }
代码解释
order(values, decreasing = TRUE):这个函数会返回一组索引值,按照values从大到小的顺序排列,比如输入c(3,1,2)时,返回的索引是1,3,2。names[sorted_indices]:用得到的索引去取names向量里的元素,就能得到按values降序排列的names了。
测试示例输入:
names_sort(c(3,1,2), c("A","B","C"))
输出结果:
[1] "A" "C" "B"
完全符合预期。
内容的提问来源于stack exchange,提问作者Kash
相关产品推荐
相关产品推荐

