首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R函数值到数据

R函数值到数据
EN

Stack Overflow用户
提问于 2018-04-20 23:14:38
回答 1查看 29关注 0票数 0

我正在构建这个函数

代码语言:javascript
复制
f <- function(x) {
        bruto <- x*1.289
        LC <- bruto*1.0124
        npd <- max(470 - 0.16*max(0,(bruto - 600)),0)
        lubos <- 5*850*1.289*1.05^3
        tax_base <- max(0,(bruto-npd))
        gpm <- ifelse(bruto<=lubos, tax_base*0.21, lubos *0.21+(bruto-lubos)*0.25) 
        sodra <- min(max(bruto*0.185, 600*0.185), lubos * 0.185)
        db <- bruto*0.0124
        neto <- bruto - gpm - sodra
        list(old_bruto=x, new_bruto=bruto, npd=npd, gpm = gpm, sodra = sodra, neto = neto, ITR=((LC-neto)/LC))
}

如果输入f(400)等单个值,则会给出正确的结果,但如果我尝试

代码语言:javascript
复制
x <- seq(100, 25000, by=10)
df <- f(x)
df <- data.frame(old_bruto=df$old_bruto, ITR=df$ITR)

它给出了非常奇怪的结果示例:f(100)应该导致ITR=0.86,但是在df ITR(100)=20.99

有人能指出我的错误在哪里吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-20 23:25:51

一个问题可能是您使用的是minmax,它们只返回一个数字。当你将事物向量化时,你需要它们返回向量的最大分段。

输入pminpmax

代码语言:javascript
复制
min(1:5, 3)
# [1] 1
pmin(1:5, 3)
# [1] 1 2 3 3 3

试一试这个版本:

代码语言:javascript
复制
f <- function(x) {
        bruto <- x*1.289
        LC <- bruto*1.0124
        npd <- pmax(470 - 0.16*pmax(0,(bruto - 600)),0)
        lubos <- 5*850*1.289*1.05^3
        tax_base <- max(0,(bruto-npd))
        gpm <- ifelse(bruto<=lubos, tax_base*0.21, lubos *0.21+(bruto-lubos)*0.25) 
        sodra <- pmin(pmax(bruto*0.185, 600*0.185), lubos * 0.185)
        db <- bruto*0.0124
        neto <- bruto - gpm - sodra
        list(old_bruto=x, new_bruto=bruto, npd=npd, gpm = gpm, sodra = sodra, neto = neto, ITR=((LC-neto)/LC))
}

f(c(100,101))
# $old_bruto
# [1] 100 101
# $new_bruto
# [1] 128.900 130.189
# $npd
# [1] 470 470
# $gpm
# [1] 0 0
# $sodra
# [1] 111 111
# $neto
# [1] 17.900 19.189
# $ITR
# [1] 0.8628335 0.8544119
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49950809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档