Tidyverse: ошибка в as.matrix: попытка применить не-функцию - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь вычислить значения SPEI, используя пакет SPEI и метод Hargreaves. Я хочу автоматизировать процесс, чтобы я мог рассчитать SPEI для всех 6 станций в одной go и сохранить их в новый файл spei.3.

SPEI рассчитывается в три этапа. Сначала мы рассчитываем значения ПЭТ (spei_pet), которые затем вычитаем из значения осадков, чтобы вычислить климатический баланс c (spei_cwbal). Затем значение CWBAL используется в функции SPEI из одноименного пакета с scale для вычисления значений SPEI.

Я новичок в R и очень новичок в tidyverse, но inte rnet говорит, что с ними легче работать. Я написал код ниже, чтобы выполнить мою задачу. Но я, безусловно, что-то упускаю (или, может быть, многие вещи), потому что код выдает ошибку. Пожалуйста, помогите мне определить ошибку в моем коде и помочь мне найти решение.

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...