R语言0-1列归一化:保留首列与表头但值全为NA的问题
问题分析与修复方案
核心问题:函数未返回结果
你的自定义函数normalize_0_to_1_columnwise内部构建了归一化后的数据集normalized_SEC,但没有通过return()语句将结果返回。同时你也没有将函数的输出赋值给normalized_SEC变量,直接输出的话该变量未被定义,因此显示全为NA。
次要冗余代码
函数最后一行colnames(normalized_SEC)[-1] <- colnames(SEC)[-1]是多余的——循环中用normalized_SEC[[col]]赋值时,已经自动沿用了原列名,无需额外设置。
修复后的完整代码
normalize_0_to_1_columnwise <- function(SEC) { normalized_SEC <- data.frame(ml = SEC$ml) # 保留未归一化的ml列 # 对除ml外的每一列做0-1归一化 for (col in names(SEC)[-1]) { col_data <- SEC[[col]] # 避免分母为0的情况(某列所有值相同时) if (max(col_data) == min(col_data)) { normalized_SEC[[col]] <- 0 } else { normalized_SEC[[col]] <- (col_data - min(col_data)) / (max(col_data) - min(col_data)) } } return(normalized_SEC) # 返回处理后的数据集 } # 调用函数并赋值给变量 normalized_SEC <- normalize_0_to_1_columnwise(SEC) # 查看结果 normalized_SEC
额外优化说明
修复代码中增加了分母为0的判断:如果某一列所有数值都相同,max - min会等于0,直接计算会产生NA,这里统一设为0,避免报错。
内容的提问来源于stack exchange,提问作者glitterbox
相关产品推荐
相关产品推荐

