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

如何在R语言中将列名传入自定义离群值查询函数?

解决R函数传入列名查找离群值的问题

你的代码存在两个关键问题,导致无法得到预期结果,下面是修正方案:

核心问题分析

  1. 函数调用错误:调用find_outliers时缺少第一个必填参数my_data,且列名需要以字符串形式传入(或通过非标准求值处理)。
  2. 列索引方式错误:my_data$colname是按字面量查找名为colname的列,而非使用变量colname的值去匹配列,必须改用[[ ]]运算符实现变量索引。

基础版修正代码(字符串传参)

my_data= data.frame( sex= c("f", "m", "f", "f", "m"),
                     age= c(22, 30, 24, 27, 30),
                     eduyears= c(12,16, 15, 12, 17),
                     weight= c(53, 70, 60, 110, 75),
                     height= c(160, 183, 157, 168, 180))

find_outliers= function (my_data, colname) {
  # 使用[[ ]]引用变量指定的目标列
  out_values= boxplot.stats(my_data[[colname]])$out
  # 匹配离群值所在行的索引
  out_ind= which(my_data[[colname]] %in% out_values) 
  # 提取指定列的离群值相关信息
  outliers= my_data[out_ind ,c("sex","age","eduyears", colname)] 
  return (outliers)
}

# 调用时传入数据集和字符串形式的列名
find_outliers(my_data, "weight")

运行后会返回预期结果:

sex age eduyears weight
4   f  27       12    110

进阶版(支持无引号传参)

如果希望像使用dplyr语法一样不用引号传列名,可以通过substitute()和deparse()处理非标准求值:

find_outliers= function (my_data, colname) {
  # 将传入的列名表达式转为字符串
  colname <- deparse(substitute(colname))
  out_values= boxplot.stats(my_data[[colname]])$out
  out_ind= which(my_data[[colname]] %in% out_values) 
  outliers= my_data[out_ind ,c("sex","age","eduyears", colname)] 
  return (outliers)
}

# 无需加引号直接传入列名
find_outliers(my_data, weight)

内容的提问来源于stack exchange,提问作者maya zadok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:05:27