我创建了一个如下所示的函数
DI <- function(W=W, V=V, Ci=Ci, Cf=Cf, Cf_Des=Cf_Des, Vres=Vres,
Vfinal=Vfinal, onebyn_ads=onebyn_ads) {
Ads <- (Ci - Cf)*(V/W)
Cf_D1 <- Cf_Des[[1]]
Ci_D1 <- max(Cf, na.rm=T)/(Vfinal/Vres)
Des1 <- (Cf_D1 - Ci_D1)*(Vfinal/W)
Ads_D1 <- max(Ads, na.rm=T) - Des1
Cf_D2 <- Cf_Des[[2]]
Ci_D2 <- Cf_D1/(Vfinal/Vres)
Des2 <- (Cf_D2 - Ci_D2)*(Vfinal/W)
Ads_D2 <- Ads_D1 - Des2
Cf_D3 <- Cf_Des[[3]]
Ci_D3 <- Cf_D2/(Vfinal/Vres)
Des3 <- (Cf_D3 - Ci_D3)*(Vfinal/W)
Ads_D3 <- Ads_D2 - Des3
Cf_D4 <- Cf_Des[[4]]
Ci_D4 <- Cf_D3/(Vfinal/Vres)
Des4 <- (Cf_D4 - Ci_D4)*(Vfinal/W)
Ads_D4 <- Ads_D3 - Des4
Ads_Des <- c(Ads_D1, Ads_D2, Ads_D3, Ads_D4)
log_Cf_Des <- log10(Cf_Des)
log_Ads_Des <- log10(Ads_Des)
fit.slr <- lm(log_Ads_Des ~ log_Cf_Des)
a <- 10^coef(fit.slr)[[1]]
onebyn <- coef(fit.slr)[[2]]
DI <- onebyn_ads/onebyn
return(list(a=a, onebyn=onebyn, DI=DI))
}
对于具有4行的数据集,函数运行良好,如
DI(W=2, V=20, Ci=df$Initial_conc, Cf=df$Equilibrium_conc,
Cf_Des=df$Cf_Des, Vres= 5, Vfinal=20, onebyn_ads=0.2056263)
现在,您可以在函数中看到,从Cf_D1
到Cf_D4
,Cf_Des
的行方向子集化一直进行到第4行。假设某个人的数据中有4行以上,那么它将无法正确计算。如何使它对任意数量的数据行运行呢?以下是示例数据
df <- structure(list(Initial_conc = c(10, 20, 40, 60), Equilibrium_conc = c(0.61958938580799,
1.63333333333333, 17.27814490161, 35.1896333333333), Cf_Des = c(13.6284722222222,
7.47767857142857, 6.0515873015873, 4.83630952380952)), row.names = c(NA,
4L), class = "data.frame")
2条答案
按热度按时间42fyovps1#
显然,计算是在
Cf_D1
上初始化的。完成此操作后,使用for
循环(2到NROW次迭代)。对于原始 Dataframe
df
,DI
和DI2
的结果相等:现在在
df2
中使用任意行数:with
,您可以避免在调用函数时指定df$
。nwnhqdif2#
可以在函数中包含循环:
5行示例:
调用您的函数: