R语言如何让自定义函数输出保留输入向量的元素名称
原因说明
R的sort()函数在启用partial参数执行部分排序时,底层实现默认不会保留输入向量的元素名称,属于内置函数的设计特性,因此你的f2函数返回值会丢失名称属性。
解决方案
推荐使用sort.list()替代sort()实现需求,既可以保留partial参数的高性能优势,又能直接通过原向量索引拿到带名称的返回值:
f2 <- function(x, n){ len <- length(x) target_pos <- len - n + 1 # sort.list返回排序后的原向量索引,partial参数逻辑和sort完全一致 sorted_index <- sort.list(x, partial = target_pos)[target_pos] # 直接按索引取原向量元素,天然保留对应名称 return(x[sorted_index]) }
效果验证
使用你提供的测试用例运行:
x <- 1:10 x <- setNames(x, letters[1:10]) f2(x, 2) # 输出: # i # 9
完全符合保留元素名称的需求,同时和原f2的取值逻辑完全一致。
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

