为什么在R中调用mode函数计算众数时始终返回"numeric"结果?
问题原因
- R基础包自带的
mode()函数本身就不是用于计算众数的,它的作用是返回R对象的存储类型,你要计算的Age列是数值型,所以调用该函数会返回"numeric",属于正常的函数返回结果,不是代码运行报错。 - mean、median、sd等统计量可以正常计算,是因为上述函数都是R基础包原生提供的统计计算函数,R本身没有内置众数的统计计算函数,所以你需要调用第三方包的对应函数,或者自行实现众数计算逻辑。
- 你加载
modest包后仍得到该结果,是因为modest包中用于计算众数的函数名为modest(),并没有覆盖基础包的mode()函数,你调用的仍然是基础包的类型查询函数。 - 此前出现的S3方法覆盖提示来自
htmlwidgets包,和当前众数计算问题没有关联。
解决方法
方法1:使用modest包的正确函数
确认你已经正确安装并加载modest包后,调用对应函数即可:
# 首次使用先安装包,已安装可跳过 install.packages("modest") # 加载包 library(modest) # 计算众数 mode_age <- modest(AgeFromFirstDataSet$Age)
方法2:自定义众数计算函数
不需要额外安装第三方包,自行实现逻辑即可:
# 自定义返回第一个出现的众数的函数 get_mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } # 调用计算 mode_age <- get_mode(AgeFromFirstDataSet$Age)
如果你的数据存在多个众数,需要返回所有众数,可以使用如下自定义函数:
# 自定义返回所有众数的函数 get_all_modes <- function(x) { ux <- unique(x) tab <- tabulate(match(x, ux)) ux[tab == max(tab)] } # 调用计算 mode_age <- get_all_modes(AgeFromFirstDataSet$Age)
内容的提问来源于stack exchange,提问作者Ziggy_Statdust
相关产品推荐
相关产品推荐

