Векторизация с двумя аргументами - PullRequest
0 голосов
/ 18 мая 2019

У меня есть ковариационная функция типа двух лагов: h1 и h2. Я пытаюсь избежать циклов для создания матрицы ковариационной функции. Когда я набираю cov1, это не дает мне матрицы. Просто вектор, если я наберу, например, covmatrix(h1=1:5,h2=1:5). Как я могу получить, например, всю матрицу 5 на 5?

Я попробовал все функции применения и новую функцию векторизации (с нижним регистром v)

R код:

x=arima.sim(n = 100   , list(ar = .5))
cov=function(h1,h2){
     (1/n)*sum((x[1:(n-h1-h2)]-mean(x))*(x[(1+h1):(n-h2)]-mean(x))*(x[(1+h1+h2):n]-mean(x)))
}
covmatrix=Vectorize(cov)

1 Ответ

1 голос
/ 18 мая 2019

Простой двойной - apply должен получить то, что вы ищете. Обратите внимание, что возвращаемое значение векторизованной функции равно диагонали ковматрисы.

test <- sapply(1:5, function(x) sapply(1:5, function(y) cov(x, y)))
all.equal(diag(test), covmatrix(1:5, 1:5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...