R语言自定义奇偶判断及按规则计算新列函数报错排查
代码错误点说明
- 函数传参缺失:你定义的
check()、checkresult()两个函数都要求传入df(数据框)和col(待计算的列名)两个参数,但你在checkresult内部调用check()、最后外部调用checkresult()时都漏传了col参数,运行会直接触发参数缺失报错。 - 判断逻辑取值错误:
check()返回的是新增了check列的完整数据框,你直接将整个数据框和字符串'even'做等值判断是无效的,需要提取返回结果中的check列作为ifelse()的判断条件。
修正后可运行代码
保留原有双函数结构的版本
## 生成奇偶判断列 check = function(df,col){ df['check'] = ifelse(df[,col] %% 2 ==0, 'even', 'odd') return(df) } ## 按奇偶规则计算结果列 checkresult = function(df,col){ # 先调用check生成带奇偶标记的数据框,补全col参数 df_checked = check(df, col) # 提取check列作为判断条件计算结果 df_checked['res'] = ifelse( df_checked$check == 'even', df_checked[,col] * 2, df_checked[,col] - 5 ) return(df_checked) } # 调用示例:将col参数替换为你实际要判断的数值列名即可 # 例:待判断列名为num时,写法为 checkresult(df, col = "num") checkresult(df, col = "你的目标数值列名")
更简洁的单函数版本
不需要拆分两个函数,逻辑更直观,运行效率更高:
odd_even_calc = function(df, col){ # 一次性生成奇偶标记列和计算结果列 df$check = ifelse(df[[col]] %% 2 == 0, 'even', 'odd') df$res = ifelse(df$check == 'even', df[[col]] * 2, df[[col]] - 5) return(df) } # 调用方式和上面一致 odd_even_calc(df, col = "你的目标数值列名")
测试验证
用测试数据跑通示例:
# 构造测试数据框 df = data.frame(num = c(1,2,3,4,5,6)) odd_even_calc(df, col = "num")
运行输出结果符合预期:
num check res 1 1 odd -4 2 2 even 4 3 3 odd -2 4 4 even 8 5 5 odd 0 6 6 even 12
内容的提问来源于stack exchange,提问作者simcity
相关产品推荐
相关产品推荐

