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

传入列名字符串调用R的ROSE函数处理不平衡数据报错,求解决方案

问题解决:ROSE函数中字符串列名传递错误

核心问题分析

  1. 函数名拼写错误:你定义的函数是process_ROSE_imbalanced_data,但调用时写成了process_ROSE_imbalance(缺少末尾的d),这会导致函数调用失败。
  2. 参数传递不匹配:rlang::enquo()用于捕获裸变量名(即不带引号的列名,如cancer_class),但你传入的是字符串'cancer_class',导致enquo无法正确解析变量,最终ROSE函数找不到对应的列。

解决方案

方案1:修改函数支持字符串输入(推荐)

使用rlang::sym()将字符串转换为符号,再注入到公式中:

process_ROSE_imbalanced_data <- function(class_var, train_input){
    # 把字符串列名转为符号
    class_sym <- rlang::sym(class_var)
    # 注入到ROSE的公式里
    rose_result <- ROSE(!!class_sym ~ ., data = train_input)$data
    return(rose_result)
}

调用时保持传字符串(注意修正函数名):

balanced_train <- process_ROSE_imbalanced_data('cancer_class', train_frame)

方案2:直接构造公式字符串

无需rlang,通过字符串拼接生成公式:

process_ROSE_imbalanced_data <- function(class_var, train_input){
    # 拼接公式字符串并转为公式对象
    rose_formula <- as.formula(paste(class_var, "~ ."))
    rose_result <- ROSE(rose_formula, data = train_input)$data
    return(rose_result)
}

调用方式同上。

方案3:调用时传入裸变量名

如果不想修改函数,调用时直接传不带引号的列名:

# 修正函数名+传裸变量名
balanced_train <- process_ROSE_imbalanced_data(cancer_class, train_frame)

验证结果

运行修正后的代码后,可通过table(balanced_train$cancer_class)查看平衡后的类别分布,结果应接近1:1的均衡状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:25