как избегать использования для петли, управляя кодом немного линий кода последовательно в R

Я стараюсь не использовать для петли, если это возможно. Это - целый код, данные матрицы - просто проценты.

x.r = read.zoo("Matrix.csv", header=F, sep = ",", format = "%m/%d/%Y")
yrs = 5
niter = nrow(x.r)-yrs*52+1
N = ncol(x.r)
x.r.w = matrix(0,nrow=niter,ncol=N)
for (i in 1:niter) {
     x.r.sub = x.r[i:(i+yrs*52-1),]
     covar = cov.shrink(x.r.sub)
     zeros = array(0, dim = c(N,1))
     aMat  = t(array(1, dim = c(1,N)))
     res = solve.QP(covar, zeros, aMat, bvec=1, meq = 1)
     x.r.w[i,] = res$solution
     }

Я загрузил часть данных в Matrix.csv в этой связи

Matrix.csv

3
nl ja de
@Justin благодарит за ваш ответ. It' s данные о временном ряде и я управляю кодом для каждых 52 подмножеств наблюдений в большем множестве. I' m просто в новинку для R и don' t знают, возможно ли то, что я хочу.
добавлено автор nopeva, источник
@Justin I' ve опубликовал код. Я могу загрузить файл, если вам нужен он.
добавлено автор nopeva, источник
Я предполагаю, что снова вы чувствуете, что имеют недостаточно информации так спасибо в течение вашего времени так или иначе хотя я don' t понимают вашу позицию, чтобы быть честными.
добавлено автор nopeva, источник
@Justin файл загружается, возможно, можно взглянуть. Я думаю, что это может векторизовать некоторые линии индивидуально, но не слишком уверено, как заставить его работать со всеми линиями вместе.
добавлено автор nopeva, источник
Посмотрите эта почта. Можете вы отправлять часть своих данных и переменных you' использование ре? А именно, x.r , селитра , yrs , N и x.r.w . Кроме того, вы don' t потребность затем его неявное в для петли .
добавлено автор Justin, источник
Все возможно в R. Чем больше информации, которую вы предоставляете о своих данных и проблеме, тем лучше ответ будет.
добавлено автор Justin, источник
Я haven' t вниз проголосовал за вас, но причина состоит в том, что я не могу управлять вашим кодом. если вы обеспечиваете часть Matrix.csv или dput (голова (x.r)) тогда, мы можем управлять вашим кодом и попыткой помочь.
добавлено автор Justin, источник

1 ответы

Позволяет началу с вашим вопросом. Я на самом деле загрузил ваши данные, но код, который вы дали, чтобы прочитать файл, не работает. это ошибки с:

Error in read.zoo("Downloads/Matrix.csv", header = FALSE, sep = ";", format = "%m/%d/%Y",  : 
  index has 155 bad entries at data rows: 2 3 6 7 ...

Я также изменил сентябрь = ',' , чтобы сентябрь = ';' , так как это - данные, которые вы обеспечили. Затем вы назначаете селитру , который, начиная с x.r 256 рядов, завершает то, чтобы быть -3 . Так, конечно, x.r.w не может быть создан начиная с nrow=niter ничего не означает...

Наконец, ускорение вашего кода:

Переместите вещи, которые являются постоянными за пределами вашего для петли. Определенно:

zeros = array(0, dim = c(N,1))
aMat  = t(array(1, dim = c(1,N)))

Так как они не зависят от я .

Я действительно находил, что функция решает. QP , но не нашел cov.shrink . И я не знаком с также. Часто решающие устройства медленные и повторяющиеся и трудные убыстриться. Однако это кажется, что это - что-то, что могло легко быть разделено на многократные нити. Смотрите на foreach .

До предотвращения для петель , иногда кодируйте, и более ясно и так же эффективен в для петли , как это было бы в , применяют функция типа. Для петель не имеет устраняться, просто использоваться соответственно.

В будущем, пожалуйста, создайте полностью восстанавливаемый пример это содержит ваши данные, пакеты, которые вы используете и код, который работает. Это приведет вас к более глубокому пониманию проблемы и получит вас намного лучше, более точные и более полные ответы.

3
добавлено
Пакет, который включает cov.shrink, является corpcor. Спасибо за ваш ответ так или иначе. Ошибки, которые вы получаете, могли бы быть связаны с моим регионом конфигурации окон потому что я don' t знают, почему R иногда признает сентябрь = ";" как сентябрь = "," в моем PC.
добавлено автор nopeva, источник