R用for循环与if语句编写通用列均值计算函数输出错误求助
代码问题分析
你的代码存在以下几个核心错误,导致输出不符合预期:
- 判断逻辑对象错误:
is.numeric(input_data)是判断整个输入数据框是否为数值类型,而R的data.frame本身不属于numeric类型,所以该判断永远返回FALSE,所有列都会进入else分支输出非数值提示,正确的判断对象应该是循环中的每一列。 - 列提取方式错误:使用
input_data[i]提取列返回的是1列的data.frame结构,而非列向量,即使判断逻辑正确,基于该结构计算均值也不符合要求,应该使用双中括号[[提取列向量:input_data[[i]]。 - 未符合作业要求:作业明确要求使用自定义均值函数,你封装后的代码直接调用了R内置的
mean()函数,不符合要求,需要复用你之前编写的my_mean逻辑。 - 冗余写法:
colnames(input_data[i])属于冗余代码,循环变量i本身就是遍历得到的列名字符串,直接使用i即可。
修正后代码
# 保留要求的自定义均值函数 my_mean <- function(data_col){ if(is.numeric(data_col)){ return(sum(data_col)/length(data_col)) }else{ return('Non-numeric data') } } means_function <- function(input_data){ for(i in colnames(input_data)){ current_col_mean <- my_mean(input_data[[i]]) cat(paste(i, "Mean:", current_col_mean, "\n")) } } # 调用测试 means_function(simulated_data)
内容的提问来源于stack exchange,提问作者Robbert
相关产品推荐
相关产品推荐

