R语言categoricalToNumeric可变参数函数调用后数据未变更问题求解
问题原因
- R语言默认采用传值调用规则,函数内部修改的
data是外部传入对象的副本,不会直接修改全局环境中的原data变量 - 代码中
data$i的写法错误:$运算符不会解析变量i的值,会直接尝试查找数据框中名为i的列,导致你指定的分类变量根本没有被修改
修正方案
第一步:修改函数代码
categoricalToNumeric <- function(data,...) { for(i in list(...)) { # 用[[]]解析字符串形式的列名,完成对应列的类型转换 data[[i]] <- as.numeric(as.factor(data[[i]])) } # 返回修改后的数据框 return(data) }
第二步:调整调用方式
将函数返回的修改后数据框赋值给原变量,覆盖原数据即可:
data <- categoricalToNumeric(data, 'school', 'sex', 'address', 'famsize', 'Pstatus', 'Mjob', 'Fjob', 'reason', 'nursery', 'internet', 'guardian.x', 'schoolsup.x', 'famsup.x', 'paid.x', 'activities.x', 'higher.x', 'romantic.x', 'guardian.y', 'schoolsup.y', 'famsup.y', 'paid.y', 'activities.y', 'higher.y', 'romantic.y')
调用完成后可执行str(data)查看列类型,确认转换结果符合预期。
内容的提问来源于stack exchange,提问作者BuddhiLW
相关产品推荐
相关产品推荐

