R语言自定义foo函数返回向量丢失元素名称如何解决?
问题原因
min() 函数运算时会自动丢弃输入向量的名称属性,仅返回纯数值,这是你丢失结果名称的核心原因。你调用sapply得到的运算结果本身是带列名的,但是经过min()处理后名称就被清除了。
修复方案
修改函数逻辑,先保存带名称的统计结果,取最小值后保留对应名称即可:
foo <- function(data, ...){ dot_cols <- rlang::ensyms(...) str_cols <- purrr::map_chr(dot_cols, rlang::as_string) # 先保存各列唯一值计数的命名向量 unique_counts <- sapply(str_cols, function(i) length(unique(data[[i]]))) # 提取最小值,同时匹配对应名称 min_val <- min(unique_counts) names(min_val) <- names(which.min(unique_counts)) return(min_val) }
运行测试
调用foo(h, study, scale)即可得到你预期的输出:
scale 2
补充说明
如果存在多个列的唯一值计数同为最小值,想要全部返回带名称的结果,可以把最后两步替换为:
min_val <- unique_counts[unique_counts == min(unique_counts)]
所有符合条件的列都会带名称一同返回。
内容的提问来源于stack exchange,提问作者rnorouzian
相关产品推荐
相关产品推荐

