为什么R忽略return(paste())命令?自定义bar_count函数仅返回总铝棒数
问题原因分析
- R函数的执行逻辑是碰到第一个
return()语句就会立即终止运行,返回对应值,后续所有代码都不会执行。你当前代码中return (num.of.bars)是第一个被触发的return语句,函数运行到这行就直接退出了,后面两行return以及放在这行之后的print语句自然都不会生效。 - 补充:你当前的小数判断逻辑存在漏洞,仅通过
kg%%5 != trunc(kg%%5)校验无法覆盖所有小数场景,且未做输入合法性、非负性校验,建议调整校验逻辑。
修正方案
如果需要同时返回总棒数、两种规格铝棒的数量,可以把所有结果打包为命名列表后统一返回,修正后的代码示例如下:
bar_count <- function(kg){ # 前置校验:仅支持正整数重量订单 if(!is.numeric(kg) || kg <= 0 || kg != trunc(kg)){ return(F) } # 直接用整除、取余计算两种规格的数量,逻辑更简洁 num.of.five <- kg %/% 5 num.of.one <- kg %% 5 num.of.bars <- num.of.five + num.of.one # 所有结果打包为列表统一返回 return( list( total_bars = num.of.bars, five_kg_qty = num.of.five, one_kg_qty = num.of.one ) ) }
调用效果示例:
# 输入7kg的返回结果 > bar_count(7) $total_bars [1] 3 $five_kg_qty [1] 1 $one_kg_qty [1] 2 # 输入小数的返回结果 > bar_count(7.5) [1] FALSE
内容的提问来源于stack exchange,提问作者KingP
相关产品推荐
相关产品推荐

