R语言如何通过if else与sapply函数检查两列数值的大小关系
R代码问题排查与修正
错误原因
- 函数调用错误:
sapply()仅支持对单个向量进行遍历并传入自定义函数,你需要同时传入Numbers、Numbers2两列的逐行值作为函数参数,应当使用支持多向量逐元素遍历的mapply()函数。 - 判断逻辑错误:你的需求是判断
Numbers2列的数值是否大于Numbers列,原函数中的x >= y判断逻辑与需求不符,参数对应关系也需要匹配需求调整。
修正后的完整可运行代码
df = data.frame(YesNo = c("yes","no","yes","no"), Numbers = c(4, 5, 10, 10), Numbers2 = c(5,1,11,11)) rownames(df) = c("Test1","Test2","Test3","Test4") improvement1 = function(x,y) { # x对应Numbers2,y对应Numbers,判断Numbers2是否大于Numbers if(x > y){ return("Improve") } else { return("No") } } # 使用mapply逐行传入两个列的数值调用自定义函数 df$Improvement = mapply(FUN = improvement1, df$Numbers2, df$Numbers) View(df)
更简洁的优化方案
R本身支持向量化运算,无需自定义函数和apply类循环,直接用ifelse()函数即可实现需求,代码更简洁执行效率更高:
df$Improvement = ifelse(df$Numbers2 > df$Numbers, "Improve", "No")
内容的提问来源于stack exchange,提问作者Dreammmm
相关产品推荐
相关产品推荐

