今天其实用的还是之前的例子,理论上是可以连着前面的实例篇写的,但想想又觉得其实对于整个实例来说,这个部分的计算已经有点跑远了,而且想写这篇的主要动力还是因为之前有提过会单独开篇讲apply函数,所以,就权当是插播了
apply系列函数(其中包括了apply、lapply、sapply)是R语言中非常神迹的一个存在,因为,合理利用这个函数的情况下,可以取代在其他编程语言中常用的循环结构,而这个所谓的合理利用,大多数时候是和function一起联用的,所以,我们又见证了一对CP的出现
首先看下apply函数的说明:
请容我比较完(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\")
然后,读取这些名称对应的csv文件,这里设置了一个三点传入参数stringsAsFactor = FALSE给read.csv,表示读取到的分类项不使用因子型
Files <- apply(Filename,2,read.csv,stringsAsFactor = FALSE)
来看下读取结果:
咋样,效果还可以不?
OK,练完手咱再加一点点难度,套个自定义的function进去
昨天写的实例中后半段咱做了一个按照20年期限去贷款会需要付多少利息的计算,但是,对实际操作来说,当然是希望在可以负担得起的情况下(最高月供不超过月收入一半),贷款越早还清利息就越少,所以,咱需要一个可以计算不同贷款年限的工具
先看看昨天的计算方法,我们在计算出了总贷款、公积金贷款和商贷三部分的金额后,利息采用等额本金来计算,总利息按照等差数列求和的方式,为(首月+末月)*总月份数/2
已有的贷款金额数据:
#首月利息
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年
然后用apply横向计算,把这4个年限逐个计算利息,就得到了8套不同价格的房子在4档不同年限下的等额本金贷款的利息
当然,如果考虑到年限太短,分割到每个月的月供过高会超出还款能力的话,可以在现有的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) }
看下计算结果:
嗯,很圆满,happyhappy~~~~
利息计算结果放进房源表,收工
本文内容源自网友投稿,多成号仅提供信息存储服务不拥有所有权。如有侵权,请联系站长删除。qq97伍4伍0叁11