在r中编写输出结果取决于参数的函数的最佳方法是什么?

问题描述 投票:0回答:2

我想写一个函数来计算英国的所得税,可能在包装内。精确的公式每年都会定期更改,但我不想使用每次更改都会编写新函数的方法,而是要使用参数“ year”来控制函数的行为。因此,例如:

income_tax(x ='25000',year ='2019/20'),其中x是收入的向量,年份指定要应用的税收规则。

考虑到每年的公式可能非常复杂,并且每年都会增加新的更新,因此组织和管理此功能的最佳方法是什么?

是否有面向对象的解决方案?还是每年在内部编写内部函数,在主函数内部编写一些if / else逻辑?

r function
2个回答
0
投票

这是一个元问题,因为它不是R特有的,但是...我想,即使年份不同,也有一些共同点(形式上,即使不是所有细节)到几年。我很想有一个由income_tax调用的功能列表(每年一个),而这些功能又是定制的,但可以调用通用功能:

year_fns <- list(
`2019/20` = function(x, ...) {
   taxable <- post_allowance(x, 11000)
   # now some bespoke stuff for this year
   if (taxable > 100e3 ){
     ...
   }
   ....
   final_value
},
`2020/21` = #another function 
...
)

post_allowance  <- function(x, allowance) {
# some common functionality
}

然后您只需通过以下方式计算所得税

income_tax <- function(x, year, ...) {
   year_fns[[year]](x, ...)
}

这可能需要一点时间,但是R的优点是函数像数字,字符串等一样易于处理。因此,我们正在寻找正确的函数以在year_fns[[year]]部分中进行调用,然后使用(x,...)部分调用该函数


0
投票

在R中,您可以传递表达式(或表达式的一部分),就像数字和字符串一样,这意味着它们可以作为函数调用中的参数进行部署。函数expression()最有可能满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.