R语言如何统计A、B序列趋势交叉反转次数并提取对应值
问题诊断
你提供的原始代码存在两个核心问题:
- 循环语法错误:
i+1: length(m)+1的运算符优先级不符合预期,实际会被R解析为i + (1:length(m)) + 1,导致j的取值完全错误,还会出现索引越界问题 - 逻辑错误:双重循环遍历所有i和j的组合,会重复统计翻转情况,完全不符合仅统计首次状态切换的需求
实现思路
你需要统计的是B和A的大小关系发生翻转的次数,只需要逐位对比相邻位置的大小关系是否变化即可:
- 先生成每一位
B>A的状态值,符合为1,不符合为0 - 计算相邻状态的差值,差值不为0就说明发生了翻转,每发生一次翻转计数+1
- 最终统计的翻转总数就是你需要的结果
修正后代码
A <- c(1,2,3,4,5,8,10,15) B <- c(0,3,5,3,6,11,14,13) fn <- function(m, n) { # 生成每一位B>A的状态值 state <- as.integer(n > m) # 统计状态翻转的次数 count <- sum(diff(state) != 0) return(count) } # 调用函数输出结果 fn(A,B)
运行后输出结果为4,完全符合你的预期。
内容的提问来源于stack exchange,提问作者tyk
相关产品推荐
相关产品推荐

