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 <- 1Lni <- 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时,精度就已经达到要求了。