You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R语言的if else与循环函数简化下述代码语法?

代码优化建议

原代码存在的问题

  1. 大量重复的if else判断,代码冗余,后续维护(比如新增分类)会非常麻烦
  2. 错误地将print()的返回值(NULL)赋值给peramalan,这应该不是你的真实需求;同时peramalan初始长度设为n,但循环中赋值给i+1,最后一次循环会出现越界报错

优化方案

步骤1:将分散的y变量整合到命名列表

把yA1到yA23按名称对应存入列表,通过字符串索引直接取值:

# 创建分类与对应值的映射列表
y_mapping <- list(
  A1 = yA1, A2 = yA2, A3 = yA3, A4 = yA4, A5 = yA5,
  A6 = yA6, A7 = yA7, A8 = yA8, A9 = yA9, A10 = yA10,
  A11 = yA11, A12 = yA12, A13 = yA13, A14 = yA14, A15 = yA15,
  A16 = yA16, A17 = yA17, A18 = yA18, A19 = yA19, A20 = yA20,
  A21 = yA21, A22 = yA22, A23 = yA23
)

步骤2:简化循环逻辑

不需要一堆条件判断,直接通过索引取值,同时修正数组长度问题:

n <- length(Tabel_FLR$fuzzifikasi)
# 调整peramalan长度为n+1,避免越界
peramalan <- array(NA, dim = c(n + 1))

for(i in 1:n){
  # 直接从映射列表取对应值赋值
  peramalan[i+1] <- y_mapping[[Tabel_FLR$fuzzifikasi[i]]]
  # 如果确实需要打印,单独执行print
  print(y_mapping[[Tabel_FLR$fuzzifikasi[i]]])
}

更高效的向量化写法(替代循环)

R语言优先推荐向量化操作,代码更简洁且效率更高:

n <- length(Tabel_FLR$fuzzifikasi)
peramalan <- array(NA, dim = c(n + 1))
# 批量赋值peramalan的第2到n+1位
peramalan[2:(n+1)] <- unlist(y_mapping[Tabel_FLR$fuzzifikasi])
# 批量打印对应值
print(unlist(y_mapping[Tabel_FLR$fuzzifikasi]))

优化优势

  • 消除冗余代码,后续新增分类(比如A24)只需在y_mapping中添加元素,无需修改核心逻辑
  • 向量化写法避免循环开销,数据量大时性能提升明显
  • 代码逻辑更清晰,可读性更强

内容的提问来源于stack exchange,提问作者Amsal Esa Hasana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:52:48