R函数参数赋值对象方案:用switch、if else还是函数实现基础计算器
R简易计算函数实现问题排查与修复
原代码问题梳理
- 运算选择逻辑缺失:当前代码没有根据传入的
operation参数判断需要执行的运算类型,直接把operation参数当数值做除法,要么触发类型错误,要么因为R的向量化运算规则得到异常矩阵结果 - 参数默认值错误:
operation = addition中的addition未加引号,属于未定义的变量,不是代表运算类型的字符串标识,运行时会直接报对象不存在错误 - return语法错误:R的
return()不支持直接返回多个独立对象,要输出多结果必须把内容打包为列表或者命名向量 - 运算确认字符串硬编码错误:原代码返回的是固定字符串
"operation",不能动态匹配当前实际执行的运算名称
修复后实现方案
这里采用switch实现分支判断,比if...else写法更简洁,可读性和执行效率更高,完整可运行代码如下:
basiccalc <- function(x, y, operation = "addition") { # 匹配运算类型计算原始结果,非法运算直接抛出友好提示 raw_res <- switch(operation, "addition" = x + y, "subtraction" = x - y, "multiplication" = x * y, stop("仅支持三种运算:addition(加法)、subtraction(减法)、multiplication(乘法)")) # 计算除以3*pi的最终结果 final_calc <- raw_res / (3 * pi) # 打包返回两个要求的输出项 return(list( 运算结果除以3pi的值 = final_calc, 运算确认信息 = paste0("已执行运算:", operation) )) }
调用示例
# 调用默认加法,输入x=3、y=6 basiccalc(3, 6) # 调用乘法,输入x=2、y=9 basiccalc(2, 9, operation = "multiplication") # 单独提取计算结果可以用$符号取值,例: basiccalc(3,6)$`运算结果除以3pi的值`
内容的提问来源于stack exchange,提问作者jenports
相关产品推荐
相关产品推荐

