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

R语言使用for循环与if else编写check_even函数结果全乘3问题排查

问题原因分析
    1. 行列索引顺序错误,且错误对列名字符串做下标索引
      你传入的col_test和col_multiply都是单个列名字符串,原代码写的col_test[i]是尝试取字符串的第i个字符,完全不符合取指定列第i行值的需求;同时取值时行列顺序写反,正确写法应为df[i, col_test],即先指定行号i,再指定列名。
    1. 赋值范围错误
      原代码df[,'res'] = xxx是每次循环都对整个res列做全量覆盖,而非仅修改当前循环行i的res值,会导致最终res列全是最后一次循环的计算结果。
    1. return语句位置错误
      return被放在了for循环内部,循环只执行第一行(i=1)就会直接返回结果,而第一行INT1的值为1是奇数,所以全列都是乘3的结果,和你观测到的现象完全一致。
修正后的完整代码
# 测试数据集
df_test = data.frame(INT1 = c(1:10), INT2 = (sample(x = c(20:100),size = 10, replace = F)))

check_even = function(df, col_test, col_multiply){
  # 先初始化res列,避免循环中逐行赋值效率问题
  df$res <- NA
  for(i in 1:nrow(df)){
    # 取当前行col_test列的值判断奇偶
    if(df[i, col_test] %% 2 == 0){
      # 偶数则当前行col_multiply列乘2赋值给res对应行
      df[i, 'res'] = df[i, col_multiply] * 2
    } else {
      # 奇数则乘3
      df[i, 'res'] = df[i, col_multiply] * 3
    } 
  }
  # 循环结束后再返回完整df
  return(df)
}  

# 测试调用
check_even(df_test, 'INT1', 'INT2')

内容的提问来源于stack exchange,提问作者wickylee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:15:07