解决方法:条件的长度> 1,并且仅使用第一个元素

苏尔坦

我使用以下代码使用R.计算税金,其中两个变量可以作为参数给出。使用数据集时,我想根据类别计算税额。我是包装开发的新手。请帮助我解决这个问题。

当我插入数据集时,仅计算第一类并收到此Waring消息时出现错误。

警告消息:如果if(category == 1){:条件的长度> 1,则仅使用第一个元素

IIT<- function(income,category) {
if (category == 1){
if (income > 0 && income <= 18200) {
tax <- 0
} else if (income > 18200 && income <= 37000) {
tax <- (income - 18200) * .10
} else if (income > 37000 && income <= 80000) {
tax <- 3572 + (income - 37000) * .20
} else if (income > 80000 && income <= 180000) {
tax <- 17547 + (income - 80000) * .30
} else if (income > 180000 && Inf) {
tax <- 54547 + (income - 180000) * .40
}
return(tax)}
else if (category==2){
if (income > 0 && income <= 18200) {
  tax <- 0
} else if (income > 18200 && income <= 37000) {
  tax <- (income - 18200) * .15
} else if (income > 37000 && income <= 80000) {
  tax <- 3572 + (income - 37000) * .25
} else if (income > 80000 && income <= 180000) {
  tax <- 17547 + (income - 80000) * .35
} else if (income > 180000 && Inf) {
  tax <- 54547 + (income - 180000) * .45
}
return(tax)
}
}
伯恩哈德

首先,尝试使事情保持简单。您的语法比实际需要的要复杂。对于一对值,您可以将函数改写为:

single.IIT <- function(income, category) {
    if (income < 0) stop("Error in IIT: income must bei > 0.")
    if (category == 1){
        if (income <= 18200) return(0)
        if (income <= 37000) return((income - 18200) * .19)
        if (income <= 80000) return(3572 + (income - 37000) * .325)
        if (income <= 180000) return(17547 + (income - 80000) * .37)
        return(54547 + (income - 180000) * .45)
        }

    if (category==2){
        if (income <= 18200) return(0)
        if (income <= 37000) return((income - 18200) * .15)
        if (income <= 80000) return(3572 + (income - 37000) * .25)
        if (income <= 180000) return(17547 + (income - 80000) * .35)
        return(54547 + (income - 180000) * .45)
    }

    stop("ERROR in IIT: category must be either 1 or 2.")
}

在简短版本中,您可以更轻松地发现错误。由于您想一次处理多个数据,因此需要向量化:

IIT <- Vectorize(single.IIT)

现在您可以对其进行测试:

> IIT( income = c(23000, 500000, 0), category = c(1, 2, 1))
[1]    912 198547      0
> IIT( income = c(0, 0, 500, 500, 19000, 19000, 40000, 40000),
+      category = c(1, 2, 1, 2, 1, 2, 1, 2))
[1]    0    0    0    0  152  120 4547 4322
> IIT( income = c(0, 18000, -20), category = c( 1, 1, 1))
Error in (function (income, category)  : 
Error in IIT: income must bei > 0.
> IIT( income = c(0, 18000, 202), category = c( 1, 1, 5))
Error in (function (income, category)  : 
ERROR in IIT: category must be either 1 or 2.

编辑:在注释中,您询问了如何将其与数据框一起使用:

expl <- data.frame(income = c(30000, 40000, 50000,60000),
                  bodyweight = c(75, 60, 45, 98),
                  nationality = c("F", "CH", "D", "AU"),
                  category = c(1, 2, 1, 2))
# we need the first and the fourth column in that dataframe
expl$tax <- IIT(expl[[1]], expl[[4]])
print(expl)
plot(tax ~ income, data = expl, col=category, pch=19)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

条件的长度> 1,并且仅将使用第一个元素(RE:miceadds,MIDS)

来自分类Dev

“条件的长度> 1,并且将仅使用第一个元素”错误

来自分类Dev

错误:条件的长度> 1,并且在r中仅使用第一个元素

来自分类Dev

使用if else循环时出现错误“条件的长度> 1,并且将仅使用第一个元素”

来自分类Dev

“条件的长度> 1,并且将仅使用第一个元素”在数据框上嵌套“ if else”的警告

来自分类Dev

使用Apply来避免“条件的长度> 1,并且只会使用第一个元素”?

来自分类Dev

使用gsub从字符串中删除模式:参数'pattern'的长度> 1,并且仅使用第一个元素

来自分类Dev

在 if (wspolczynnik > waga_linkow[n]) { :条件长度 > 1 并且只使用第一个元素

来自分类Dev

仅选择第一个元素-使用XML :: Twig的条件

来自分类Dev

仅选择第一个元素-使用XML :: Twig的条件

来自分类Dev

使用双管道分隔的args的选择方法仅检查第一个元素...替代吗?

来自分类Dev

仅更改列表中第一个元素的方法(将列表作为参数传递)

来自分类Dev

仅写入 c++ stl 向量的第一个元素的正确方法

来自分类Dev

不确定如何解决“数字表达式包含41个元素:仅第一个使用”的警告

来自分类Dev

jQuery html()仅给出与each()方法一起使用的第一个值

来自分类常见问题

获取符合条件的第一个元素

来自分类Dev

仅使用split删除第一个“:”的更好方法是什么?

来自分类Dev

选择第一个使用libxml中的xPath验证条件的元素

来自分类Dev

通过使用Cut + Insert方法匹配第一个元素来对齐行

来自分类Dev

Java链表与第一个元素进行比较,并使用peek()方法删除

来自分类Dev

获取R中连续增加的数字的长度N的第一个序列的第一个元素

来自分类Dev

获取R中连续增加的数字的长度N的第一个序列的第一个元素

来自分类Dev

仅当第一个发出的事件不符合条件时,才从通量中发布下一个元素

来自分类Dev

如何在对象数组上使用map方法仅获取第一个值

来自分类Dev

另一个虚拟模板解决方法

来自分类Dev

需要一个SVG解决方法

来自分类Dev

使用PHPExcel复制样式的解决方法

来自分类Dev

使用Ruby解决方法挑战

来自分类Dev

使用WCF解决方法的局部类

Related 相关文章

  1. 1

    条件的长度> 1,并且仅将使用第一个元素(RE:miceadds,MIDS)

  2. 2

    “条件的长度> 1,并且将仅使用第一个元素”错误

  3. 3

    错误:条件的长度> 1,并且在r中仅使用第一个元素

  4. 4

    使用if else循环时出现错误“条件的长度> 1,并且将仅使用第一个元素”

  5. 5

    “条件的长度> 1,并且将仅使用第一个元素”在数据框上嵌套“ if else”的警告

  6. 6

    使用Apply来避免“条件的长度> 1,并且只会使用第一个元素”?

  7. 7

    使用gsub从字符串中删除模式:参数'pattern'的长度> 1,并且仅使用第一个元素

  8. 8

    在 if (wspolczynnik > waga_linkow[n]) { :条件长度 > 1 并且只使用第一个元素

  9. 9

    仅选择第一个元素-使用XML :: Twig的条件

  10. 10

    仅选择第一个元素-使用XML :: Twig的条件

  11. 11

    使用双管道分隔的args的选择方法仅检查第一个元素...替代吗?

  12. 12

    仅更改列表中第一个元素的方法(将列表作为参数传递)

  13. 13

    仅写入 c++ stl 向量的第一个元素的正确方法

  14. 14

    不确定如何解决“数字表达式包含41个元素:仅第一个使用”的警告

  15. 15

    jQuery html()仅给出与each()方法一起使用的第一个值

  16. 16

    获取符合条件的第一个元素

  17. 17

    仅使用split删除第一个“:”的更好方法是什么?

  18. 18

    选择第一个使用libxml中的xPath验证条件的元素

  19. 19

    通过使用Cut + Insert方法匹配第一个元素来对齐行

  20. 20

    Java链表与第一个元素进行比较,并使用peek()方法删除

  21. 21

    获取R中连续增加的数字的长度N的第一个序列的第一个元素

  22. 22

    获取R中连续增加的数字的长度N的第一个序列的第一个元素

  23. 23

    仅当第一个发出的事件不符合条件时,才从通量中发布下一个元素

  24. 24

    如何在对象数组上使用map方法仅获取第一个值

  25. 25

    另一个虚拟模板解决方法

  26. 26

    需要一个SVG解决方法

  27. 27

    使用PHPExcel复制样式的解决方法

  28. 28

    使用Ruby解决方法挑战

  29. 29

    使用WCF解决方法的局部类

热门标签

归档