function函数的用法r(function函数的定义)

今天其实用的还是之前的例子,理论上是可以连着前面的实例篇写的,但想想又觉得其实对于整个实例来说,这个部分的计算已经有点跑远了,而且想写这篇的主要动力还是因为之前有提过会单独开篇讲apply函数,所以,就权当是插播了

apply系列函数(其中包括了apply、lapply、sapply)是R语言中非常神迹的一个存在,因为,合理利用这个函数的情况下,可以取代在其他编程语言中常用的循环结构,而这个所谓的合理利用,大多数时候是和function一起联用的,所以,我们又见证了一对CP的出现

function函数的用法r(function函数的定义)

首先看下apply函数的说明:

function函数的用法r(function函数的定义)

请容我比较完(luo)整(suo)地解释下这个帮助文件的内容

1) 用途:对一个向量组合或二维表在某个方向上使用一个功能(function),然后返回一个最简单形式的结果,结果可以是向量、二维表或列表list

2) 函数形式:apply(x,处理方向,功能, …)

3) 参数解释:x为输入值,形式一般是二维表

处理方向,1表示纵向,2表示横向,也可以用c(1,2)表示两个方向都要算

功能,可以是现有的常用函数,sum、mean、sd、var等等,也可以是自定义的function名称

三点参数传入…,在这里表示除了可以在apply内部使用别的函数以外,还支持补充所使用函数的参数进去

先举个稍微简单点的例子,咱先前不是每次读取外部文件时,用read.csv都是一个一个读取的嘛,咱用apply先做个批量读取练练手

先把要读取的文件名称全部建在一个表格里

Filename <- data.frame(\"houseprice1.csv\",\"houseprice2.csv\")

function函数的用法r(function函数的定义)

然后,读取这些名称对应的csv文件,这里设置了一个三点传入参数stringsAsFactor = FALSE给read.csv,表示读取到的分类项不使用因子型

Files <- apply(Filename,2,read.csv,stringsAsFactor = FALSE)

来看下读取结果:

function函数的用法r(function函数的定义)

咋样,效果还可以不?

OK,练完手咱再加一点点难度,套个自定义的function进去

昨天写的实例中后半段咱做了一个按照20年期限去贷款会需要付多少利息的计算,但是,对实际操作来说,当然是希望在可以负担得起的情况下(最高月供不超过月收入一半),贷款越早还清利息就越少,所以,咱需要一个可以计算不同贷款年限的工具

先看看昨天的计算方法,我们在计算出了总贷款、公积金贷款和商贷三部分的金额后,利息采用等额本金来计算,总利息按照等差数列求和的方式,为(首月+末月)*总月份数/2

已有的贷款金额数据:

function函数的用法r(function函数的定义)

#首月利息

MaxMonth <-(Accountloan2*0.0325+Bankloan2*0.049)/12

#末月利息

MinMonth<- (Accountloan2*0.0325+Bankloan2*0.049)/12/20/12

#总利息

TotalInterest<-(MaxMonth+MinMonth)*20*12/2

发觉了没,整个算法中涉及到年限的地方就两处,只要把它们更改成我们的输入值x,其实整个function的主体就出来了

---------------------function开始----------------------

InterestCal <- function (x) {

MaxMonth <-(Accountloan2*0.0325+Bankloan2*0.049)/12;

MinMonth<- (Accountloan2*0.0325+Bankloan2*0.049)/12/x/12;

TotalInterest<-(MaxMonth+MinMonth)*x*12/2;

return(TotalInterest) }

---------------------function结束----------------------

咱还需要建一个输入值x的数据表,如下:

Year <- data.frame(\"Y5\"=5,\"Y10\"=10,\"Y15\"=15,\"Y20\"=20)

这里咱输入了4个档次的年限,5年、10年、15年、20年

function函数的用法r(function函数的定义)

然后用apply横向计算,把这4个年限逐个计算利息,就得到了8套不同价格的房子在4档不同年限下的等额本金贷款的利息

function函数的用法r(function函数的定义)

当然,如果考虑到年限太短,分割到每个月的月供过高会超出还款能力的话,可以在现有的function中添几行改进一下,增加对月供能力的判断,更改部分见加粗字体

#计算不同年限等额本金利息的工具,包括月供能力判断

InterestCal <- function (x) {

MaxMonth <-(Accountloan2*0.0325+Bankloan2*0.049)/12;

MinMonth<- (Accountloan2*0.0325+Bankloan2*0.049)/12/x/12;

TotalInterest<-round((MaxMonth+MinMonth)*x*12/2,2); #小数点后留两位

Maxpay <- Totalloan2/x/12 + MaxMonth; #本息和,最高月供

Affordlevel <- Personal$RMBafterTax *0.5 + Personal$Account.M; #收入水平一半

Result <- ifelse(Maxpay > Affordlevel,\"NOK\",TotalInterest);

return(Result) }

看下计算结果:

function函数的用法r(function函数的定义)

嗯,很圆满,happyhappy~~~~

利息计算结果放进房源表,收工

本文内容源自网友投稿,多成号仅提供信息存储服务不拥有所有权。如有侵权,请联系站长删除。qq97伍4伍0叁11