Escreva em português o que esta linha do seu código faz: > V[i]<-(A[i+p]-A[i])^2/(2*(n-p))
Se ainda 💡 ainda não acender, responda a seguinte pergunta: O que acontece quando o vetor *V* indexado por *i* passar pela segunda, terceira, ..., interação em *p*. Aí veja qual a correção que precisa fazer para que o comportamento, que entendo seja o que você esperaria, seja este: > L1<-c(65.1537,62.0723,63.6386,63.9617,63.9687) > loopD(L1) [1] 1,186878245 0,306661961 0,013049201 0,000006125 [1] 0,3825880 0,5949721 0,0181610 [1] 0,3552160 0,8990832 [1] 0,7021125 [1] 1,5065955 0,9957211 1,2542992 0,7021125 HTH -- Cesar Rabak On Thu, Jun 24, 2021 at 1:50 PM Luiz Paulo Serrano por (R-br) < [email protected]> wrote: > Prezadas (os) > Solicito ajuda para corrigir esse código teoricamente bem simples mas que > já tentei e não encontrei o erro. > Agradeço desde já a atenção dispensada. > Luiz Paulo Serrano. > > > #Função Duplo Loop - Correção do código > > #A partir de um vetor qualquer > #Exemplo para um vetor de 5 elementos (normalmente são mais de 30 > elementos) > #L1<-c(65.1537,62.0723,63.6386,63.9617,63.9687) > n=5 > > #O que a função desenvolvida está fazendo > > loopD<-function(A){ > n<-length(A) > V<-NULL > Vc<-NULL > for (p in 1:(n-1)){ > for(i in 1:(n-p)){ > V[i]<-(A[i+p]-A[i])^2/(2*(n-p)) > } > > print(V) > Vc[p]<-sum(V)} > > print(Vc) > > } > > loopD(L1) > #Saída da função está errada > [1] 1.186878245 0.306661961 0.013049201 0.000006125 > [1] 0.382588002 0.594972060 0.018161002 0.000006125 > [1] 0.355216000 0.899083240 0.018161002 0.000006125 > [1] 0.702112500 0.899083240 0.018161002 0.000006125 > [1] 1.5065955 0.9957272 1.2724664 1.6193629 > > #Está fixando quatro parcelas por passo > > #Passo 1: Ve1 > 1.186878245+0.306661961+0.013049201+0.000006125 = 1.5065955 - OK > quatro parcelas - OK > > #Passo 2: Ve2 > 0.382588002+0.594972060+0.018161002+0.000006125 = 0.9957272 - Não OK > #quatro parcelas - Não OK > #Valor correto: três parcelas > Ve2: 0.382588002+0.594972060+0.018161002 = 0.9957211 > > #Passo 3: Ve3 > 0.355216000+0.899083240+0.018161002+0.000006125 = 1.2724664 - Não OK > #quatro parcelas - Não OK > #Valor correto: duas parcelas > 0.355216000+0.899083240 = 1.254299 > > #Passo 4: Ve4 > Ve4: 0.702112500+0.899083240+0.018161002+0.000006125 = 1.6193629 - Não OK > quatro parcelas - Não OK > #Valor correto: uma parcela > 0.702112500 > > #O que a função deve fazer > > L1<-c(65.1537,62.0723,63.6386,63.9617,63.9687) > n=5 > > #Passo 1: quatro parcelas > Ve1<-((L1[2]-L1[1])^2+(L1[3]-L1[2])^2+(L1[4]-L1[3])^2+ > (L1[5]-L1[4])^2)/(2*(n-1));Ve1# 1.506596 > > > Ve1<-(L1[2]-L1[1])^2/(2*(n-1))=1.186878...+(L1[5]-L1[4])^2/(2*(n-1))=6.125e-06 > > Ve1=1.186878245+0.306661961+0.013049201+0.000006125 = 1.506596 > > #Passo 2: três parcelas > > Ve2<-((L1[3]-L1[1])^2+(L1[4]-L1[2])^2+(L1[5]-L1[3])^2)/(2*(n-2));Ve2#0.9957211 > > > Ve2<-(L1[3]-L1[1])^2/(2*(n-2))=0,382588...+(L1[5]-L1[3])^2/(2*(n-2))=0.018161 > > Ve2= 0.382588002+0.594972060+0.018161002 = 0.9957272 > > #Passo 3: duas parcelas > Ve3<-((L1[4]-L1[1])^2+(L1[5]-L1[2])^2) /(2*(n-3));Ve3# 1.254299 > > Ve3<-(L1[4]-L1[1])^2 > > Ve3=0.355216000+0.899083240 = 1.254299 > > #Passo 4: uma parcela > Ve4<-(L1[5]-L1[1])^2/(2*(n-4));Ve4#0.7021125 > > > Como corrigir? > > > _______________________________________________ > R-br mailing list > [email protected] > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça > código mínimo reproduzível. >
_______________________________________________ R-br mailing list [email protected] https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
