You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:45:04