R语言cor函数自定义实现问题:返回numeric(0)
R语言corr函数返回numeric(0)的问题修复
问题根源及修正点:
complete.cases使用错误
原代码中cleandata <- complete.cases仅将函数本身赋值给变量,未对读取的数据集计算完整案例逻辑向量。正确写法应为cleandata <- complete.cases(data),这样才能生成每行是否无缺失值的布尔数组,实现有效数据筛选。路径与文件匹配问题
此前return(files)返回character(0),说明list.files未找到目标文件:- 确认
directory参数路径正确(相对路径需对应当前工作目录,建议优先使用绝对路径); - 原
pattern = "*.csv"匹配逻辑不严谨,改为pattern = "\\.csv$"可精准匹配以.csv结尾的文件,避免误匹配其他后缀文件。
- 确认
代码细节优化
read.csv(files[i], )中的多余逗号可删除,改为read.csv(files[i]);- 用
seq_along(files)替代seq(files),避免files为空时生成无效序列; - 给
cor函数添加use = "complete.obs"参数,确保极端情况下仍能正常计算相关系数。
修正后的完整代码:
corr <- function(directory, threshold = 0){ files <- list.files(path = directory, pattern = "\\.csv$", full.names = TRUE) cr <- numeric() for(i in seq_along(files)){ data <- read.csv(files[i]) cleandata <- complete.cases(data) data_clean <- data[cleandata, ] if (nrow(data_clean) > threshold){ correlation <- cor(data_clean$sulfate, data_clean$nitrate, use = "complete.obs") cr <- append(cr, correlation) } } return(cr) }
内容的提问来源于stack exchange,提问作者Randy Robbins
相关产品推荐
相关产品推荐

