R语言自定义函数-命名规则注意

Python014

R语言自定义函数-命名规则注意,第1张

udf_async_rbind <- function(path= "D:/R/oper_key_index/data/d_data/",

name= "移网线上单" ,

Date_temp = format(Date_stemp,"%Y%m%d"), # 直接引用变量不执行,需加函数转为常量

Date_last_month_day = ymd("2021-08-31") , # 函数内变量名不要与外部变量名重复

Date_last_month_day1= ymd("2021-07-31") ,

cols=190 ){

x <- udf_DT(paste0(path,name,Date_temp,".xlsx") , 1 ,0)

y <- udf_DT(paste0(path,name,format(Date_last_month_day,"%Y%m%d"),".xlsx"),1,0)

z <- udf_DT(paste0(path,name,format(Date_last_month_day1,"%Y%m%d"),".xlsx"),1,0)

if(ncol(x)>70){

x <- x[,1:cols]

y <- y[,1:cols]

z <- z[,1:cols]}else{print("全列导入")}

setnames(y,names(x))

table <- rbind(x, y)

return(table)

}

mob_dev_2ilist <- udf_async_rbind( name = "移网线上单" )

最简单但计算量最大的是泰勒公式:e=1+1/1!+1/2!+1/3!+1/4!+...

下面是求e的R语言函数:

e_fun <- function(n) {

  etemp <- 1

  ni <- 1L

  for (i in 1:n) {

    etemp <- etemp + 1 / ni

    ni <- ni * (i + 1)

  }

  return(etemp)

}

不过你题目中要求的是求到精度为0.00001就停止,所以可以采用repeat循环:

i <- 1L

ni <- 1L

etemp <- 1

repeat {

  etemp1 <- etemp

  etemp <- etemp + 1 / ni

  ni <- ni * (i + 1)

  i <- i + 1

  if (etemp - etemp1 < 0.00001) break

}

i

etemp

在最后可以看到,求到i=10时,精度就已经达到要求了。