Как избежать ошибки: $ operator недопустим для векторов atomi c, использующих пакет precintcon в R? - PullRequest
1 голос
/ 16 февраля 2020

У меня есть датафрейм df с месячным количеством осадков

str(df)
'data.frame':   396 obs. of  21 variables:
 $ year         : int  1986 1986 1986 1986 1986 1986 1986 1986 1986 1986 ...
 $ month        : int  1 2 3 4 5 6 7 8 9 10 ...
 $ stn1         : int  2 42 91 267 482 1282 1207 982 705 259 ...
 $ stn2         : int  0 9 23 61 68 151 196 73 172 59 ...
 $ stn3         : int  0 10 34 52 122 258 349 237 140 154 …

Я хочу рассчитать индекс аномалии осадков (rai) для всей станции (stn1, stn2, stn3, ....). Я использовал следующий код:

library(precintcon)
rai(df, granularity = "m")

Однако он выдает следующую ошибку

Error: $ operator is invalid for atomic vectors

Но когда я использую его только для одной станции, он работает

rai(df[1:3], granularity = "m") #calculating rai for one only station

Как я могу рассчитать Рай для всех станций одновременно без ошибок?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

rai функция, кажется, нуждается в суточных или месячных сериях осадков, поэтому первые два столбца зафиксированы. Мы можем получить все столбцы, которые начинаются с "stn1", и использовать их в функции rai.

cols <- grep('^stn1', names(df))
output <- Reduce(function(x, y) merge(x, y, by = c('year', 'month')), 
      lapply(cols, function(x) precintcon::rai(df[c(1:2, x)], granularity = "m"))) 
1 голос
/ 16 февраля 2020

Решение, не далеко от решения, предложенного @RonakShah:

num_stations <- 3
rais <-  lapply(1:num_stations, function(k) {
   dfk <- df[,c(1,2,k+2)]
   rai(dfk, granularity = "m")
})

# Plot rai of the first station
plot(rais[[1]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...