[R-br] Lista brasileira oficial de discussão do programa R

Daniel Guimarães Tiezzi dtiezzi em usp.br
Qui Jun 24 22:23:54 -03 2021


Veja se seria isso?

l = c(65.1537,62.0723,63.6386,63.9617,63.9687)
V = list()
s = 1
i = 2
for (n in 1:(length(l)-1)) {
  i = i + n -1
  v = 0
  for (j in 1:(length(l)-s)) {
    v = v + (l[i] - l[j])^2
    i = i+1
  }
  v = v / (2*(length(l)-n))
  i = 2
  s = s+1
  V[[paste0(n)]] <- v
}

print(unlist(V))

Em qui., 24 de jun. de 2021 às 13:50, Luiz Paulo Serrano por (R-br) <
r-br em listas.c3sl.ufpr.br> escreveu:

> 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
> R-br em listas.c3sl.ufpr.br
> 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.
>


-- 
Daniel Tiezzi, MD, PhD
Breast Disease and Gynecologic Oncology Division
Department of Gynecology and Obstetrics
University of São Paulo
Brazil
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20210624/f1d7a2a9/attachment.html>


Mais detalhes sobre a lista de discussão R-br