使用R语言处理nycflights13数据集时遇numeric(0)错误求助
问题排查与修正
错误核心原因
你的代码中nrow(flights$dep_delay)是错误用法:flights$dep_delay是列向量,而nrow()函数仅用于数据框、矩阵这类二维结构,对向量调用会返回NULL。后续计算中NULL参与算术运算,最终导致结果为numeric(0)。
修正后的代码
library(nycflights13) data(flights) depdelay_upper <- quantile(flights$dep_delay, .997, na.rm = TRUE) depdelay_lower <- quantile(flights$dep_delay, .003, na.rm = TRUE) dep_out <- which(flights$dep_delay > depdelay_upper | flights$dep_delay < depdelay_lower) # 用nrow(flights)获取总航班数,或length(flights$dep_delay)也可 Q1 <- ((nrow(flights) - length(dep_out)) / nrow(flights)) * 100 Q1
补充说明
- 如果需要排除
dep_delay中的NA值来计算比例(原数据中dep_delay存在NA),可以调整分母为非NA值的数量:total_valid <- sum(!is.na(flights$dep_delay)) Q1 <- ((total_valid - length(dep_out)) / total_valid) * 100 - 运行修正后的代码会得到接近你预期的99.45的结果,差异来自
quantile函数默认的分位数计算算法细节。
内容的提问来源于stack exchange,提问作者anonG
相关产品推荐
相关产品推荐

