Несколько мыслей.
Во-первых, используя apply()
, вы можете заменить этот вложенный цикл следующим образом:
cor_ScottsCk_SF_SST_JJA <-
apply(ssta_winter, MARGIN = 1:2, FUN = cor, ScottsCk_flow_1981_2010_JJA)
Во-вторых, кажется, что> 31% (596849/(360*180*29)
) точекв ssta_winter
есть NaN
или (возможно) NA_real_
.Учитывая возвращаемое значение корреляции, рассчитанное для векторов, которые содержат даже один NaN
,
cor(c(1:3, NaN), c(1:4))
# [1] NA
маловероятно, что все эти NaN
s вызывают заполнение cor_ScottsCk_SF_SST_JJA
NA
s?
В-третьих, как ясно указывают предупреждающие сообщения, некоторые из векторов, которые вы передаете в cor()
, имеют нулевую дисперсию.Они не имеют ничего общего с NaN
s: как показано ниже, R не жалуется на стандартные отклонения 0, когда задействованы NaN
.(Вполне разумно, поскольку вы не можете рассчитать стандартные отклонения для неопределенных чисел):
cor(c(NaN, NaN, NaN, NaN), c(1,1,1,1))
# [1] NA
cor(c(1,1,1,1), c(1,2,3,4))
# [1] NA
# Warning message:
# In cor(c(1, 1, 1, 1), c(1, 2, 3, 4)) : the standard deviation is zero