R语言每12行执行一次Spearman相关性分析的代码问题咨询
原代码存在的核心问题
- 赋值语法错误:首行数据读取的赋值箭头方向反了,R中左赋值统一使用
<-,且未写全读取函数名(如read.csv/read.table)。 - 索引逻辑完全错误:
df$[M,cnt]不符合R的索引规则,$运算符用于直接提取单列,不能和[]混用;同时cnt初始值为0,首次取数会得到空值,直接报错。 - 变量命名不合法:
resultM-B中的减号是算术运算符,不能作为变量名使用,会触发语法错误。 - 窗口提取逻辑错误:循环未按照需求提取连续12行的子集,同时循环内重写了全局的M、B变量,会导致后续迭代数据错误。
- 无结果存储逻辑:仅打印结果未做存储,最终无法得到完整的82个相关系数集合。
修正后可直接运行的代码
# 读取数据,替换为你实际使用的读取函数和文件路径 df <- read.csv("你的数据文件路径.csv") # 预分配结果向量,存储82个相关系数,提升运行效率 cor_res <- numeric(82) # 按12行窗口遍历计算 for (i in seq_along(cor_res)) { # 计算当前窗口的起止行号 start <- (i-1)*12 + 1 end <- i*12 # 提取当前窗口的两列数据 m_sub <- df$M[start:end] b_sub <- df$B[start:end] # 计算Spearman相关系数并存入结果 cor_res[i] <- cor(m_sub, b_sub, method = "spearman") # 可选:打印当前结果 cat("第",i,"个窗口相关系数:", cor_res[i], "\n") } # 查看全部82个相关系数 print(cor_res)
内容的提问来源于stack exchange,提问作者gahh13 gahh13
相关产品推荐
相关产品推荐

