R语言自定义直方图函数报错,如何修改代码使其正常运行?
代码修改要点及修正版本
原代码存在的问题及修改点
- 条件判断提示与逻辑完全颠倒:第二个
else if判断颜色参数,但错误提示却是要求输入字符列名;第三个判断列名类型,提示却是颜色必须为整数,逻辑与提示完全错位。 - 颜色参数判断逻辑错误:
!is.integer(as.integer(colorNumber))的写法不合理,若传入的是7这类numeric类型的整数值,会被误判,应改为判断是否为整数型数值(兼容numeric类整数输入)。 - 列引用语法错误:
dataframe$as.numeric(columnName)是错误写法,$运算符后无法通过函数动态调用列名,需改用dataframe[[columnName]]实现动态列引用。 - 缺少关键检查:原代码未验证
columnName是否存在于数据框中,也未检查对应列是否为数值型,不符合需求要求。 - x轴标签固定化:
xlab = "columnName"会让x轴显示固定字符串,需改用变量columnName显示实际传入的列名。
修正后的代码
histagram = function(dataframe, columnName, colorNumber) { # 检查是否为有效数据框 if (!is.data.frame(dataframe)) { print("Please enter a Data frame structure") return(invisible(NULL)) } # 检查列名是否为字符型且存在于数据框 if (!is.character(columnName) || !(columnName %in% colnames(dataframe))) { print("Enter a valid character column name that exists in the data frame") return(invisible(NULL)) } # 检查目标列是否为数值型 if (!is.numeric(dataframe[[columnName]])) { print("The specified column must be numeric") return(invisible(NULL)) } # 检查颜色号是否为整数(兼容numeric类整数输入) if (!is.numeric(colorNumber) || colorNumber %% 1 != 0) { print("Color must be an integer") return(invisible(NULL)) } # 生成符合要求的直方图 hist(dataframe[[columnName]], xlab = columnName, col = as.integer(colorNumber)) }
测试验证
使用内置数据集测试:
airdf <- airquality histagram(dataframe = airdf, colorNumber = 7, columnName = "Temp")
此时可正常生成Temp列的直方图,x轴显示列名Temp,颜色为对应编号的配色。
内容的提问来源于stack exchange,提问作者Danit Twito
相关产品推荐
相关产品推荐

