我正在测试时间段对计算最终结果的影响。为此,我使用了for循环,下面将对此进行详细介绍。我敢肯定,有一种使用Apply的方式可以消除循环的需要,但是我无法解决。一些援助将是非常受欢迎的。
## result vector
HLClist<-vector()
for(i in 1:length(TimeSpan[,1])){
StartTime=TimeSpan[i,]
EndTime=TimeSpan[i,]+TimeInterval
Xbis<-Choixintervalle(X,StartTime,EndTime)
Xtierce <- resampleDF(Xbis, Ts)
HLC<-CalcAverage(Xtierce$Ph,Xtierce$Ti,Xtierce$Te)
HLC<-HLC[length(HLC)]
HLClist<-append(HLClist,HLC)
}
哪里
TimeSpan是一个列表,其中包含所有星形时间(格式:double),定义为以下时间:
InitTime <-as.POSIXct("16/02/2014 0:00", format="%d/%m/%Y %H:%M")
FinalTime <-as.POSIXct("16/03/2014 0:00", format="%d/%m/%Y %H:%M")
TimeInterval <-144*3600
SEndTime <- FinalTime - TimeInterval
TimeSpan<-data.frame(seq(InitTime, SEndTime, by=3600))
TimeInterval是开始时间和结束时间之间的秒数(格式:double)
> X
t Ph Elec Sol Ti Te DHW
1 16/02/2014 0:00 612 612 0.0 22.70 4.600000 0.0000
2 16/02/2014 0:05 612 612 0.0 22.70 4.600000 0.0000
3 16/02/2014 0:10 516 516 0.0 22.79 4.600000 0.0000
4 16/02/2014 0:15 480 480 0.0 22.70 4.600000 0.0000
5 16/02/2014 0:20 540 540 0.0 22.70 4.600000 0.0000
6 16/02/2014 0:25 528 528 0.0 22.60 4.600000 0.0000
7 16/02/2014 0:30 492 492 0.0 22.60 4.600000 0.0000
8 16/02/2014 0:35 528 528 0.0 22.50 4.600000 0.0000
9 16/02/2014 0:40 492 492 0.0 22.49 4.600000 0.0000
10 16/02/2014 0:45 456 456 0.0 22.43 4.600000 0.0000
Choixintervalle是以下函数:
Choixintervalle <-function(X,startTime=NA,endTime=NA) {
## set the start time if not specified
if(is.na(startTime)){startTime <- as.POSIXct(X[1,1], format="%d/%m/%Y %H:%M")}
else{startTime<-as.POSIXct(startTime, format="%d/%m/%Y %H:%M")}
## set the end time if not specified
if(is.na(endTime)){ endTime <- as.POSIXct(X[nrow(X),1], format="%d/%m/%Y %H:%M")}
else{endTime<-as.POSIXct(endTime, format="%d/%m/%Y %H:%M")}
X<-X[(as.POSIXct(X$t,format="%d/%m/%Y %H:%M"))>startTime,]
X<-X[(as.POSIXct(X$t,format="%d/%m/%Y %H:%M"))<endTime,]
return(X)
}
ResempleEDF是以下功能
resampleDF <- function(X,Ts,startTime = NA, endTime =NA,timeName="t",includeNA=TRUE,quantizeTime=TRUE,meanNaRm=FALSE)
{
## Split into periods of length Ts, and take the mean of each period
X[,timeName] <-as.POSIXct(X[,timeName], format="%d/%m/%Y %H:%M")-startTime
iSplit <- as.integer(X[,timeName]) %/% Ts
## Do the resampling
Xres <- aggregate(X, list(iSplit), mean, na.rm=meanNaRm)
## Remove the "Group" column
Xres <- Xres[,-1]
## Convert time to POSIXct
Corr<- as.integer(Xres[1,timeName])
Xres[,timeName] <- startTime + as.integer(Xres[,timeName])-Corr
return(Xres)
}
-CalcAverage是以下函数:
CalcAverage <- function(Q, Ti,Te) {
Solution = vector(length(Q), mode="double" )
for (i in 1:length(Q)){
Temp<-sum(Ti[1:i]-Te[1:i])
Heat<-sum(Q[1:i])
#création du vecteur R
Solution[i]<-Heat/Temp
}
return(Solution)
}