Tidyverse:as.matrix中的错误:尝试应用非功能

时间:2020-04-14 19:05:20

标签: r tidyverse mutate

我正在尝试使用SPEI包和Hargreaves方法来计算SPEI值。我想自动化该过程,以便可以一次性计算所有6个站点的SPEI并将其保存到新文件spei.3

SPEI分三个步骤计算。首先,我们计算PET值(spei_pet),然后将其从降水值中减去以计算气候水平衡(spei_cwbal)。然后,将CWBAL值用于SPEI函数中的scale包中,以计算SPEI值。

我是R的新手,tidyverse的新手,但是互联网上说他们更容易上手。我写了下面的代码来完成我的任务。但是我肯定会丢失一些(或可能很多东西),因为代码会引发错误。请帮助我确定代码中的错误,并帮助我找到解决方案。

library(tidyverse)
library(SPEI)

file_path = "I:/Proj/Excel sheets - climate/SPI/heatmap/spei_forecast_data.xlsx"
file_forecast = openxlsx::read.xlsx(file_path)

##spei calculation

spei.scale = c(3, 6, 9, 12, 15, 24)
stations = c(1:3, 5:7)
lat = c(23.29, 23.08, 22.95, 22.62, 22.43, 22.40)

lat.fn = function(i) {
  if (i <= 3)
    lat.fn = lat[i]
  else if (i == 5)
    lat.fn = lat[4]
  else if (i == 6)
    lat.fn = lat[5]
  else if (i == 7)
    lat.fn = lat[6]
}

for ( i in stations) {

  file_forecast %>% 
    mutate(spei_pet[i] <- hargreaves(Tmin = file_forecast$paste("tmin", i),
                                    Tmax = file_forecast$paste("tmax", i),
                                    Pre = file_forecast$paste("p", i),
                                    lat = lat.fn[i])) %>% 
    mutate(spei_cwbal[i] <- spei_pet[[i]] - file_forecast$paste("p", i)) %>% 
    mutate(spei.3[i] <- spei(spei_cwbal[[i]], scale = 3))

}

它引发错误

Error in as.matrix(Tmin) : attempt to apply non-function

lat.fn[i]也会引发错误,如果我不使用i,该错误将得到纠正。但是我需要使用某种函数,以便lat.fn根据i取不同的值。

Error in lat.fn[i] : object of type 'closure' is not subsettable

谢谢。

编辑:数据采用data.frame的形式。我将其转换为小标题,以了解其外观。

> file_forecast
# A tibble: 960 x 20
   Month     p7     p6     p5     p3     p2     p1 tmax7 tmax6 tmax5 tmax3 tmax2 tmax1 tmin7 tmin6 tmin5 tmin3 tmin2 tmin1
   <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Jan    0.162  0.185  0.293  0.436  0.529  0.658  26.4  26.5  26.2  25.9  25.7  24.9  9.57  9.75  10.0  10.4  9.94  9.77
 2 Feb    0.207  0.305  0.250  0.260  0.240  0.186  32.2  32.2  32.1  31.9  31.8  30.9 12.4  12.7   12.7  13.0 12.2  11.9 
 3 Mar    0.511  0.650  0.602  0.636  0.625  0.501  37.3  37.1  37.1  37.0  36.9  36.1 18.7  19.3   18.3  18.0 17.3  16.9 
 4 Apr    0.976  1.12   1.05   1.12   1.17   1.16   39.5  39.2  39.6  39.5  39.5  38.8 22.8  23.2   22.5  22.2 21.7  20.8 
 5 May    3.86   4.12   3.76   4.29   4.15   3.84   38.2  37.9  38.3  38.1  38.2  37.6 25.1  25.4   24.9  24.7 24.5  23.8 
 6 Jun    7.31   8.27   7.20   8.51   9.14   8.76   38.0  37.6  38.1  38.0  38.0  37.7 27.2  27.3   26.9  26.7 26.6  26.1 
 7 Jul   13.9   15.6   13.2   17.0   19.1   17.8    33.9  33.6  34.0  33.9  33.8  33.5 26.8  26.9   26.6  26.5 26.4  26.0 
 8 Aug   15.2   17.2   14.4   18.6   20.1   18.4    32.6  32.4  32.7  32.4  32.3  32.0 26.2  26.4   26.1  25.9 25.9  25.4 
 9 Sep   11.4   11.9   10.5   12.9   13.2   13.1    31.9  31.9  31.8  31.5  31.5  30.9 24.4  24.6   24.3  24.3 24.3  23.7 
10 Oct    5.19   5.76   4.81   5.40   5.44   5.04   29.8  30.0  29.6  29.3  29.3  28.6 20.9  21.1   20.8  20.9 20.8  20.2 
# ... with 950 more rows, and 1 more variable: year <dbl>

0 个答案:

没有答案