R 给定表格中p和q因子的计算

R 给定表格中p和q因子的计算,r,R,我有一个土壤水分亏缺表SMD表,有170列,每列是一个月,103937行,我想计算p和q,如下面的等式所示,我写了一个代码,但从第四行开始它就不起作用了;它说: vectorlength=21时出错,na.rm=TRUE是未使用的参数 数据中有很多NA我不想包括在内:方程是 p=1-(m/m+b)....1 q=C/(m+b)......2 其中m和b是最干和最湿条件下累积SMD与一个月到十八个月不同持续时间之间线性回归的斜率和截距图9。对于每个网格单元,为了评估干燥条件下的m

我有一个土壤水分亏缺表SMD表,有170列,每列是一个月,103937行,我想计算p和q,如下面的等式所示,我写了一个代码,但从第四行开始它就不起作用了;它说:

vectorlength=21时出错,na.rm=TRUE是未使用的参数

数据中有很多NA我不想包括在内:方程是

    p=1-(m/m+b)....1
    q=C/(m+b)......2
其中m和b是最干和最湿条件下累积SMD与一个月到十八个月不同持续时间之间线性回归的斜率和截距图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)

向量函数中没有参数na.rm。检查?,向量。您需要以其他方式处理NAs…您可以从主数据帧(df本身)中删除NAs。Manoj G感谢,但它不起作用,我重新启动了所有NAs并运行了代码,但它仍然在第四行出现相同的错误;vectorLength=18时出错:未使用的参数长度=18。Juvinvectorlength=18和vectorLength=18,mode=numeric对我来说工作正常。我应该是小写的。在上面的错误中,它是大写的。R是区分大小写的。在你的问题中,代码第5行中的L也是大写的。不应该这样。