<div dir="ltr">Uma possível solução é a seguinte:<div><br></div><div>####</div><div>v1 <- c(1,2,3,4,5,6,7,8,9,10)<br>v2 <- numeric(length = length(v1))<br><br>for (j in 1:length(v1)){<br> if(j <= 3){<br> v2[j] <- tail(cumsum(v1[1:j]), 1)<br> } else {<br> v2[j] <- tail(cumsum(v1[(j-3):j]), 1)<br> }<br>}<br><br>v2</div><div>####<br></div><div><br></div><div>Se o comprimento de v1 for menor ou igual a 3, toma-se o último elemento de cumsum(v1) através da função tail().</div><div><br></div><div>Se o comprimento de v1 não for menor ou igual a 3, toma-se o último elemento de cumsum(v1[(j-3):j]), que é justamente a janela dos 4 últimos elementos da soma cumulativa.</div><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">--</div><div dir="ltr"><div dir="ltr">Marcus Nunes</div><div dir="ltr">Professor Adjunto</div><div dir="ltr">Universidade Federal do Rio Grande do Norte</div><div dir="ltr">Centro de Ciências Exatas e da Terra</div><div dir="ltr">Departamento de Estatística</div><div dir="ltr">Laboratório de Estatística Aplicada</div><div dir="ltr"><a href="mailto:marcus@marcusnunes.me" target="_blank">marcus@marcusnunes.me</a></div><div dir="ltr"><a href="https://marcusnunes.me/" target="_blank">https://marcusnunes.me/</a></div><div dir="ltr"><a href="http://shiny.estatistica.ccet.ufrn.br" target="_blank">http://shiny.estatistica.ccet.ufrn.br</a></div><div dir="ltr"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 28, 2019 at 5:06 PM Paulo Eduardo de Mesquita por (R-br) <<a href="mailto:r-br@listas.c3sl.ufpr.br">r-br@listas.c3sl.ufpr.br</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Prezado(a)s colegas da lista,<div><br></div><div>Peço a vossa ajuda nessa questão. Embora eu já tenha uma solução, gostaria de explorar eventuais alternativas que evitem o uso do loop for.</div><div><br></div><div>Eu tenho um vetor de números inteiros v1 com 10 elementos.</div><div><br></div><div>Eu preciso de um código que produza um outro vetor numérico v2, também com 10 elementos, em que:</div><div>- o valor do primeiro elemento seja igual ao valor do primeiro elemento de v1;</div><div>- o valor do segundo elemento seja igual a soma do primeiro e do segundo elemento de v1;</div><div>- o valor do terceiro elemento seja igual a soma do primeiro, do segundo e do terceiro elementos de v1;</div><div>- todos os demais elementos (do 4o ao 10o) sejam iguais a soma dele e dos três elementos imediatamente anteriores a ele.</div><div><br></div><div>Tentei soluções aplicando as funções da familia apply, mas acaba caindo no loop.</div><div><br></div><div>Eu imagino que seja possível uma solução utilizando a função cumsum ou alguma variante que restrinja a soma aos últimos 4 elementos e defina uma regra para a exceção representada pelos 03 primeiros elementos. Qualquer ajuda nessa implementação é muito benvinda.</div><div><br></div><div>Grato pela atenção,</div><div><br></div><div>Código:</div><div><br></div><div>v1 <- c(1,2,3,4,5,6,7,8,9,10)<br>v2 <- numeric(length = length(v1))<br>for (i in seq_along(v1)) {<br> v2[i] <- ifelse(i < 2, v1[i],<br> ifelse(i < 3, v1[i - 1] + v1[i],<br> ifelse(i < 4, v1[i - 2] + v1[i - 1] + v1[i], v1[i - 3] + v1[i - 2] + v1[i - 1] + v1[i])))<br>}<br>v2<br>data.frame(v1, v2)<br></div><div><br></div><div>-- <br><div dir="ltr" class="gmail-m_3406176847886494986m_-6862721509832971941gmail_signature">Paulo Eduardo de Mesquita<br>Disciplina de Infectologia - Faculdade de Medicina Universidade do Oeste Paulista Presidente Prudente - São Paulo - Brasil<br>telefone: 5518 97718261</div></div></div>
_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" rel="noreferrer" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" rel="noreferrer" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</blockquote></div>