Внешняя функция на массивах, полученная из функции Vectorize - PullRequest
0 голосов
/ 20 мая 2019

Я векторизовал функцию с двумя параметрами, и в результате получился трехмерный массив.Чтобы получить этот вывод, я использую внешнюю функцию, но продолжаю получать сообщение об ошибке (даже когда я связываю функцию Vectorized).

Я пробовал cbind, как и другие проблемы с аналогичным кодом ошибки.

n=20
mc=10
q=3

x=matrix(0,ncol=mc, nrow=n)
for (j in 1:mc){
x[,j]=arima.sim(n = n   , list(ar = .5))
}

gamhat=function(h1,h2){(1/n)*colSums((x[-c((n-(h1+h2)+1):n),]- 
colMeans(x))*(x[-c(1:h1,(n-h2+1):n),]-colMeans(x))*(x[-c(1:(h1+h2)),]- 
colMeans(x)))
}
covmat=outer(1:q,1:q,Vectorize(gamhat))

Ожидается массив из 20 * 10 * 3 (как nx mc xq).

1 Ответ

0 голосов
/ 20 мая 2019

Попробуйте добавить SIMPLIFY=FALSE к Vectorize,

 covmat=outer(1:q,1:q,Vectorize(gamhat, SIMPLIFY = F))

Возможно, это не совсем то, что вы ожидали, поскольку это будут списки числовых векторов размером 3х3, но это то, что вы просите в первых двух аргументах external.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...