如何在R中使用tapply函数计算变异系数并解决x未找到报错
报错原因
你传入tapply的FUN参数没有声明为函数形式,R无法识别表达式里的x对应每组提取的count列向量,所以抛出未找到对象的错误。
修正方案
把变异系数的计算逻辑封装成匿名函数传入即可,有两种可选写法:
- 通用匿名函数写法(兼容所有R版本)
tapply(ReefFish$count, ReefFish$commonname, FUN = function(x) 100 * sd(x)/mean(x))
- 简写语法(仅兼容R 4.1.0及以上版本)
tapply(ReefFish$count, ReefFish$commonname, FUN = \(x) 100 * sd(x)/mean(x))
可选优化
如果存在某组count全为0的情况,mean(x)为0会返回Inf,可以增加判断逻辑规避异常值:
tapply(ReefFish$count, ReefFish$commonname, FUN = function(x) { if(mean(x) == 0) return(NA) 100 * sd(x)/mean(x) })
内容的提问来源于stack exchange,提问作者Alison Meeth
相关产品推荐
相关产品推荐

