我有土壤水分亏缺(SMD)表,170列(每列是一个月)和103937行,我想计算p和q,如下面的等式,我写了一个代码,但它从第四行开始不起作用;它说:
向量中的错误(长度= 21,na.rm = TRUE是未使用的参数)
数据中有很多NA,我不想包括:等式
p=1-(m/m+b)....1
q=C/(m+b)......2
其中m和b是最干燥和最潮湿条件下累积SMD与1个月至18个月不同持续时间之间线性回归的斜率和截距(图9)。对于每个网格单元,要在干燥条件下评估m和b,首先选择历史中最干燥的月份(最低SMD)并绘制一个月的持续时间。然后计算每两个相邻月份的SMD运行总和,并选择最低累积SMD,持续两个月。重复相同的过程直到持续18个月并且选择最高累积SMD用于潮湿条件。然后使用线性回归拟合这些图并识别斜率,-m和截距b。 C来自干旱专论的最佳拟合线,其范围从-100到100,然后按比例缩放以适合PDSI类别(-4,4)的范围。代码如下:
SM=read.table('SMD.csv',header=T,sep=',')
df=data.frame(data[3:21])#subset from 3 to 21 column; i have 2000 column and 103937rows.
matrix=data.matrix(df)
x=t(t(c(matrix[3:21])))
dry=vector(Length=21, na.rm=TRUE)
wet=vector(length= 21,na.rm=TRUE )
slope_dry= vector(length= 103937,na.rm=TRUE )
slope_wet= vector(length= 103937,na.rm=TRUE )
inter_dry= vector(length= 103937,na.rm=TRUE )
inter_wet= vector(length= 103937,na.rm=TRUE )
for (a in 1:103937){
for (i in 1:103937) {
sum_SMD=vector(length=nrow(matrix)-i+1)
for (j in 1 : (nrow(matrix)-i+1)) {
for(b in j :(j+i-1))
sum_SMD[j]<-sum_SMD[j]+SMD[b,a]
}
dry[i]<-min(sum_SMD)
wet[i]<-max(sum_SMD)
}
model_dry<-lm(dry~x)
slope_dry[a]<-coefficients(model_dry)[2]
inter_dry[a]<-coefficients(model_dry)[1]
model_wet<-lm(wet~x)
slope_wet[a]<-coefficients(model_wet)[2]
inter_wet[a]<-coefficients(model_wet)[1]
}
c_dry=slope_dry/25
#c_dry=-4
p_dry=1-slope_dry/(slope_dry+inter_dry)
q_dry=c_dry/(slope_dry+inter_dry)
#c_wet=4
c_wet=slope_wet/25
p_wet=1-slope_wet/(slope_wet+inter_wet)
q_wet=c_wet/(slope_wet+inter_wet)