Australia's marginal tax ratesに従った所得水準の税金を計算する関数を書いています。限界税率の計算R
私は、以下のものを使用して支払うべき税額の正確な量になり、関数の簡易版書いた:
income_tax <- function(income) {
# Calculate income tax liability based on income
#
# Returns the amount of income tax owed
if (income > 0 & income <= 18200) {
tax <- 0
} else if (income > 18200 & income <= 37000) {
tax <- (income - 18200) * .19
} else if (income > 37000 & income <= 80000) {
tax <- 3572 + (income - 37000) * .325
} else if (income > 80000 & income <= 180000) {
tax <- 17547 + (income - 80000) * .37
} else if (income > 180000) {
tax <- 54547 + (income - 180000) * .45
}
return(tax)
}
をこのアプローチの問題は、私は速度をハードコーディングされたことで、各ブラケットでロジックに支払われた金額。これは関数を壊れやすくし、異なるレートや括弧をテストすることができないことを意味します(これが私の最終目標です)。
私がしたいのは、税率表からロジックを生成することです。
ここでは、擬似コードで記述されたアルゴリズムをコメントとして使用したいと思っているバージョンを示します。
income_tax <- function(income) {
# Calculate income tax liability based on income
#
# Returns the amount of income tax owed
brackets <- c(18200,37001,80000,180000,180000)
rates <- c(0,.19,.325,.37,.45)
tax_rates <- data.frame(brackets, rates)
for (i in 1:nrow(tax_rates)) {
# if income is in bracket_X then:
# tax <- (income - bracket_X[i-1]) * rate_X + minimum_tax_from_bracket_X[-1]
}
return(tax)
}
私の問題は、私は概念化やデータは次のようにエンコードされている間負っ税と限界税率の量を生成するための方法をコードすることができないということです。
私はこれを最も簡単なものとして与えていますし、pminとdiffの2つの関数についても教えています。他の答えも使えますが、これは最もエレガントです。 –