Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2018:alunos:trabalho_final:vinicius.montagner:script
fraldas.o <- read.table("fraldas.orcamento.csv", sep=",", header=T) #Crie o objeto "fraldas.o" e importe um arquivo texto de uma planilha orcamentaria das fraldas, com quantidade de fraldas por pacote e os precos cotados para cada tamanho.

fraldas = function(data.inicio, data.nasc, poup, cha.fralda, inflacao, rendimento)#Cria funcao "fraldas" com os parametros "data.inicio", "data.nasc", "poup", "cha.fralda", "inflacao".
{
  if (poup<0 ) #Verifica se "poup" foi inserido corretamente.
  {
    stop ("poup precisa ser um numero maior ou igual a 0") #Senao, interrompe a funcao e exibe mensagem para o usuario.
  }
  
  message ("ATENCAO! Os parametros 'data.inicio' e 'data.nasc' devem seguir o padrao DD/MM/AA") #Mensagem que sairá no output para alertar o usuario do formato data a ser utilizado.
  
  mes = round((as.Date(data.nasc, format="%d/%m/%y")-as.Date(data.inicio, format="%d/%m/%y"))/30, 0) #Converte a entrada de data para formate 'date' e divide por 30 para chegar no numero de meses que sera poupado o dinheiro para as fraldas.

  if(missing(inflacao)) #Caso o usuario não insira o argumento inflacao, a funcao segue.
  {
  }
  else #Caso insira:
  {
   taxa= 1 + (sum(rep((inflacao/100),times=mes))) #Calcula a inflacao calculada no periodo, portanto repete o valor da inflacao MENSAL pela quantidade de meses e soma esse valor. O valor 1 no comeco da equacao eh posto pois, na funcao, ira realizar uma multiplicao da inflacao pelo valor original do produto, portanto, sem o 1, ele reduziria o valor original ao inves de aumentar.
  }
  
  vec.preco.pac <- c((mean(as.numeric(fraldas.o[1,3:5]), na.rm=T)), (mean(as.numeric(fraldas.o[2,3:5]), na.rm=T)), (mean(as.numeric(fraldas.o[3,3:5]), na.rm=T)),(mean(as.numeric(fraldas.o[4,3:5]), na.rm=T)), (mean(as.numeric(fraldas.o[5,3:5]), na.rm=T)), (mean(as.numeric(fraldas.o[6,3:5]), na.rm=T))) #Vetor com os precos medios do pacote, dividido por tamanho.
  
  rn.md=160 #Quantidade estimada de fraldas RN que um bebe utiliza.
  rn.pacote = ceiling(rn.md/fraldas.o[1,2]) #Quantidade de pacotes necessarios do tamanho RN, considerando o pacote planilhado pelo usuario.
  p.md=440 #Quantidade estimada de fraldas P que um bebe utiliza.
  p.pacote = ceiling(p.md/fraldas.o[2,2]) #Quantidade de pacotes necessarios do tamanho P, considerando o pacote planilhado pelo usuario.
  m.md=920 #Quantidade estimada de fraldas M que um bebe utiliza.
  m.pacote = ceiling(m.md/fraldas.o[3,2]) #Quantidade de pacotes necessarios do tamanho M, considerando o pacote planilhado pelo usuario.
  g.md=1200 #Quantidade estimada de fraldas G que um bebe utiliza.
  g.pacote = ceiling(g.md/fraldas.o[4,2]) #Quantidade de pacotes necessarios do tamanho G, considerando o pacote planilhado pelo usuario.
  xg.md=720 #Quantidade estimada de fraldas XG que um bebe utiliza.
  xg.pacote = ceiling(xg.md/fraldas.o[5,2]) #Quantidade de pacotes necessarios do tamanho XG, considerando o pacote planilhado pelo usuario.
  xxg.md=480 #Quantidade estimada de fraldas XXG que um bebe utiliza.
  xxg.pacote= ceiling(xxg.md/fraldas.o[6,2]) #Quantidade de pacotes necessarios do tamanho XXG, considerando o pacote planilhado pelo usuario.
  vec.md= c(rn.md, p.md, m.md, g.md, xg.md, xxg.md)#Vetor gerado para calculo de geracao de lixo do output
  vec.pacote <- c(rn.pacote, p.pacote, m.pacote, g.pacote, xg.pacote, xxg.pacote) #Vetor com a quantidade de pacotes a serem comprados, dividido por tamanho.
  vec.pacote.n <- vec.pacote #Atribuindo a um vetor separado que sera mostrado no output.
  
  rn.sobra= (rn.pacote*fraldas.o[1,2])-rn.md #Unidades que sobrarao no ultimo pacote de RN.
  p.sobra= (p.pacote*fraldas.o[2,2])-p.md #Unidades que sobrarao no ultimo pacote de P.
  m.sobra= (m.pacote*fraldas.o[3,2])-m.md #Unidades que sobrarao no ultimo pacote de M.
  g.sobra= (g.pacote*fraldas.o[4,2])-g.md #Unidades que sobrarao no ultimo pacote de G.
  xg.sobra= (xg.pacote*fraldas.o[5,2])-xg.md #Unidades que sobrarao no ultimo pacote de XG.
  xxg.sobra= (xxg.pacote*fraldas.o[6,2])-xxg.md #Unidades que sobrarao no ultimo pacote de XXG.
  vec.sobra <- c(rn.sobra,p.sobra,m.sobra,g.sobra,xg.sobra,xxg.sobra) #Vetor com todas as sobras de fraldas do ultimo pacote, dividido por tamanho.
  vec.sobra <- ifelse(is.na(vec.sobra ),0,vec.sobra)#Caso o usuario não tenha inserido um dos tamanhos de fralda, retira os NA/NaN do vetor para o funcionamento correto da função.
  
  if(missing(rendimento)) #Caso o parametro rendimento nao for inserido:
  {
    poup.total = as.numeric(poup*mes) #valor total acumulado pelo usuario no periodo proposto.
  }
  else #Caso seja inserido
  {
    juros.m= 1 + (sum(rep((rendimento/100),times=mes))) #Calcula o rendimento calculada no periodo, portanto repete o valor do rendimento mensal pela quantidade de meses e soma esse valor. O valor 1 no comeco da equacao eh posto pois, na funcao, ira realizar uma multiplicao do rendimento pelo valor original poupado, portanto, sem o 1, ele reduziria o valor original ao inves de aumentar.
    poup.total= (as.numeric(poup*mes))*juros.m
  }
  poupanca = poup.total #Replica o objeto poup.total que estara no output como o valor total poupado de forma inalterada pela funcao.
  
  if(missing(cha.fralda))#Se o usuario nao inserir a quantidade de pessoas que ira chamar para um cha-fralda, a funcao segue normalmente.
  {
  }
  else #Caso insira, divide o numero de pessoas entre os tamanhos de fralda e subtrai do valor total de fraldas necessarias para comprar dos tamanhos que sao as mais usados.
  {
    tabela.cha <- rep(0,6) #Cria um vetor vazio.
    if(cha.fralda<30) #Com menos de 30 convidados, divide-se somente entre fraldas M e G.
    {
      pessoas.m = floor(cha.fralda/2) #Metade das pessoas levam fraldas M. Arredonda para baixo pois precisa de menos pacotes M do que G.
      pessoas.g = ceiling(cha.fralda/2) #Metade das pessoas levam fraldas G. Arredonda para cima pois precisa de mais pacotes G do que M.
      if(pessoas.m > vec.pacote[3]) #Caso a quantidade de pessoas que vão levar fralda M seja maior que a quantidade de fraldas necessária:
      {
        pessoas.g = pessoas.g+(pessoas.m-vec.pacote[3]) #Coloca o excedente de pessoas que levariam fralda M, para fraldas tamanho G.
        pessoas.m = vec.pacote[3] #E quantidade de pessoas que levam fralda M sera igual a quantidade necessaria de fraldas M.
        vec.pacote[3] = vec.pacote[3]-pessoas.m #Subtrai as fraldas M ganhas do total que seria necessario comprar.
      }
      else #Caso contrario
      {
        vec.pacote[3] = vec.pacote[3]-pessoas.m #Subtrai as fraldas M ganhas do total que seria necessario comprar.
      }
  
      vec.pacote[4] = vec.pacote[4]-pessoas.g #Subtrai as fraldas G ganhas do total que seria necessario comprar.
  
      tabela.cha[3] <- pessoas.m #Insere a quantidade de fraldas M a serem pedidas por tamanho
      tabela.cha[4] <- pessoas.g #Insere a quantidade de fraldas G a serem pedidas por tamanho
    }
    else #Se o usuario insere uma grande quantidade de pessoas (mais de 30), divide os pedidos entre os 3 tamanhos de maior uso.
    {
      pessoas.m = floor(cha.fralda/3) #1/3 das pessoas levam fraldas M.
      pessoas.g = ceiling(cha.fralda/3) #1/3 das pessoas levam fraldas G. Arredonda para cima pois é a mais utilizada.
      pessoas.p = floor(cha.fralda/3) #1/3 das pessoas levam fraldas P.
    
    
      if(pessoas.m > vec.pacote[3]) #Caso a quantidade de pessoas que vão levar fralda M seja maior que a quantidade de fraldas necessária:
      {
        pessoas.g = pessoas.g+(pessoas.m-vec.pacote[3]) #Coloca o excedente de pessoas que levariam fralda M, para fraldas tamanho G.
        pessoas.m = vec.pacote[3] #E quantidade de pessoas que levam fralda M sera igual a quantidade necessaria de fraldas M.
        vec.pacote[3] = vec.pacote[3]-pessoas.m #Subtrai as fraldas M ganhas do total que seria necessario comprar.
      }
      else #Caso não tenha mais pessoas do que fraldas M necessarias:
      {
        vec.pacote[3] = vec.pacote[3]-pessoas.m #Subtrai as fraldas M ganhas do total que seria necessario comprar.
      }
      if(pessoas.g > vec.pacote[4]) #Caso a quantidade de pessoas que vão levar fralda G seja maior que a quantidade de fraldas necessária:
      {
        pessoas.p = pessoas.p+(pessoas.g-vec.pacote[4]) #Coloca o excedente de pessoas que levariam fralda G, para fraldas tamanho P.
        pessoas.g = vec.pacote[4] #E quantidade de pessoas que levam fralda G sera igual a quantidade necessaria de fraldas G.
        vec.pacote[4] = vec.pacote[4]-pessoas.g #Subtrai as fraldas G ganhas do total que seria necessario comprar.  
      }
      else #Caso não tenha mais pessoas do que fraldas G necessarias:
      {
        vec.pacote[4] = vec.pacote[4]-pessoas.g #Subtrai as fraldas G ganhas do total que seria necessario comprar.  
      }
    
      if(pessoas.p > vec.pacote[2]) #Caso a quantidade de pessoas que vão levar fralda P seja maior que a quantidade de fraldas necessária:
      {
        tabela.cha[5] = pessoas.p - vec.pacote[2] #Coloca o excedente de pessoas que levariam fralda P, para fraldas tamanho XG.
        vec.pacote[5] = vec.pacote[5] - tabela.cha[5]
        pessoas.p=vec.pacote[2] #E quantidade de pessoas que levam fralda XG sera igual a quantidade necessaria de fraldas XG.
        vec.pacote[2] = vec.pacote[2]-pessoas.p #Subtrai as fraldas P ganhas do total que seria necessario comprar.  
      }
      else #Caso não tenha mais pessoas do que fraldas P necessarias:
      {
        vec.pacote[2] = vec.pacote[2]-pessoas.p #Subtrai as fraldas P ganhas do total que seria necessario comprar.  
      }
      tabela.cha[3] <- pessoas.m #Insere a quantidade de fraldas M a serem pedidas por tamanho
      tabela.cha[4] <- pessoas.g #Insere a quantidade de fraldas G a serem pedidas por tamanho
      tabela.cha[2] <- pessoas.p #Insere a quantidade de fraldas P a serem pedidas por tamanho
    }

  }
  rn.tot=vec.pacote[1]*(mean(as.numeric(fraldas.o[1,3:5]), na.rm=T)) #Calcula o total gasto em fraldas RN, considerando o cha-fralda caso tenha sido inserido pelo usuario.
  p.tot=vec.pacote[2]*(mean(as.numeric(fraldas.o[2,3:5]), na.rm=T)) #Calcula o total gasto em fraldas P, considerando o cha-fralda caso tenha sido inserido pelo usuario.
  m.tot=vec.pacote[3]*(mean(as.numeric(fraldas.o[3,3:5]), na.rm=T)) #Calcula o total gasto em fraldas M, considerando o cha-fralda caso tenha sido inserido pelo usuario.
  g.tot=vec.pacote[4]*(mean(as.numeric(fraldas.o[4,3:5]), na.rm=T)) #Calcula o total gasto em fraldas G, considerando o cha-fralda caso tenha sido inserido pelo usuario.
  xg.tot=vec.pacote[5]*(mean(as.numeric(fraldas.o[5,3:5]), na.rm=T)) #Calcula o total gasto em fraldas XG, considerando o cha-fralda caso tenha sido inserido pelo usuario.
  xxg.tot=vec.pacote[6]*(mean(as.numeric(fraldas.o[6,3:5]), na.rm=T)) #Calcula o total gasto em fraldas XXG, considerando o cha-fralda caso tenha sido inserido pelo usuario.
  vec.gasto.total <- round(c(rn.tot, p.tot, m.tot, g.tot, xg.tot, xxg.tot),2) #Insere os novos valores no vetor com o gasto total, dividido por tamanho. 
  
  if(missing(inflacao))
  {
  }
  else
  {
    vec.gasto.total = vec.gasto.total*taxa
  }
  vec.gasto.total <- ifelse(vec.gasto.total<=0,0,vec.gasto.total)#Caso algum valor seja negativo (ou seja,o usuario esta ganhando mais pacotes de um determinado tamanho do que ira usar), esse valor eh zerado, fazendo com que o usuario nao precise comprar fraldas deste tamanho.
  vec.gasto.total <- ifelse(is.na(vec.gasto.total),0,vec.gasto.total)#Caso o usuario não tenha inserido um dos tamanhos de fralda, retira os NA/NaN do vetor para o funcionamento correto da função.
  
  vetor.result=NULL #Cria vetor vazio que sera utilizado nas proximas etapas.
  grana.se=NULL #Cria vetor vazio que sera utilizado nas proximas etapas.
  grana.unid=NULL #Cria vetor vazio que sera utilizado nas proximas etapas.
  for(i in 1:6)# Ciclo que ira calcular quantas fraldas sera possivel comprar com o dinheiro poupado ate o nascimento do bebe.
  {
    if(poup.total>=0)#Se o usuario ainda tiver dinheiro: 
    {
      grana.se=poup.total-vec.gasto.total[i] #subtrai o valor total gasto de determinado tamanho de fralda do valor poupado pelo usuario.
      vetor.result=append(vetor.result,grana.se) #Adiciona o resultado no vetor vazio criado previamente.
      poup.total=grana.se #Coloca o resultado da subtracao anterior no objeto que verificara se o usuario ainda possui dinheiro para continuar as compras.
    }
    if(poup.total<0) #Caso o usuario nao tenha dinheiro suficiente para comprar todas as fraldas de um determinado tamanho, o valor de 'poup.total' sera negativo.
    {
      vetor.result[i]=0 #Como valor negativo significa que o usuario ficou devendo dinheiro para comprar todas aquelas fraldas, essa posicao do vetor eh zerada e realiza a divisao para ver quantos pacotes o usuario eh capaz de comprar.
      grana.se = (poup.total+vec.gasto.total[i])/vec.preco.pac[i] #Recupera o valor original da posicao antes da subtracao do if anterior e faz a razao do dinheiro que ainda possui pelo numero de pacotes do tamanho em questao, buscando o valor minimo de pacotes que eh possivel comprar.
      grana.unid=floor(grana.se)#arredondamento para baixo, ja que o usuario nao tera dinheiro para comprar um pacote a mais para arredondar para cima.
      break #Ciclo para depois de realizar o if uma unica vez vez, pois o dinheiro que o usuario possui para compras acaba.
    }

  }
  pacotes.comprados=NULL#Criando vetor vazio
  for(i in 1:6) #Ciclo que verifica quantos pacotes o usuario eh capaz de comprar.
  {
    if(is.na(vetor.result[i])) #Caso alguma das linhas das fraldas seja deixada em branco (geralmente os tamanhos maiores):
    {
      break #Ignora o NA e segue.
    }

    if(vetor.result[i]>0)#Se for positivo, significa que o usuario foi capaz de comprar todos os pacotes necessarios daquele tamanho e ainda sobra dinheiro. Portanto adiciona ao vetor vazio "pacotes.comprados" a quantidade total necessaria de pacotes.
    {
      pacotes.comprados[i] = vec.pacote[i]
    }
    if(vetor.result[i]==0) #Se o valor for igual a 0, significa que o usuario nao tinha dinheiro suficiente para comprar todas as fraldas necessarias daquele tamanho. Portanto, adiciona ao vetor vazio "pacotes.comprados" a quantidade de pacotes que foi possivel comprar (calculado no for anterior).
    {
      pacotes.comprados[i]= grana.unid
    }
  }

  #Criando um tamanho maximo em comum para todos os vetores, para criar um data.frame sem erros.
  if(missing(cha.fralda)) #Se nao houver o cha-fralda:
  {
    max.len = max(length(vec.preco.pac), length(vec.gasto.total), length(vec.sobra), length(pacotes.comprados), length(vec.pacote), length(vec.pacote.n)) #Vetor com o tamanho maximo entre os objetos
    vec.preco.pac= c(vec.preco.pac, rep(NA, max.len-length(vec.preco.pac))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.gasto.total= c(vec.gasto.total, rep(NA, max.len-length(vec.gasto.total))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.pacote.n= c(vec.pacote.n, rep(NA, max.len-length(vec.pacote.n))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.sobra= c(vec.sobra, rep(NA, max.len-length(vec.sobra))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    pacotes.comprados= c(pacotes.comprados, rep(0, max.len-length(pacotes.comprados))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.pacote= c(vec.pacote, rep(0, max.len-length(vec.pacote))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    
    pacotes.faltantes = vec.pacote-pacotes.comprados #Cria vetor com quantas fraldas ainda faltam para comprar, dividida por tamanho.
    
    tabela.final= data.frame(round(vec.preco.pac,2), vec.gasto.total, vec.pacote.n, pacotes.comprados, pacotes.faltantes, vec.sobra, row.names = c("RN", "P", "M", "G", "XG", "XXG")) #Cria a tabela com todas informaces financeiras desejadas que estara no output da funcao.
    colnames(tabela.final) <- c("Preco medio do pacote(R$)", "Custo total dos pacotes(R$)", "Pacotes necessarios", "Pacotes comprados", "Pacotes faltantes", "Quantas unidades que sobrarao no ultimo pacote?")#Nomeia as colunas da tabela.final.
  }
  else #Se houver o cha-fralda:
  {
    max.len = max(length(vec.preco.pac), length(vec.gasto.total), length(vec.sobra), length(pacotes.comprados), length(vec.pacote), length(vec.pacote.n), length(tabela.cha)) #Vetor com o tamanho maximo entre os objetos
    vec.preco.pac= c(vec.preco.pac, rep(NA, max.len-length(vec.preco.pac))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.gasto.total= c(vec.gasto.total, rep(NA, max.len-length(vec.gasto.total))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.pacote.n= c(vec.pacote.n, rep(NA, max.len-length(vec.pacote.n))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.sobra= c(vec.sobra, rep(NA, max.len-length(vec.sobra))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    pacotes.comprados= c(pacotes.comprados, rep(0, max.len-length(pacotes.comprados))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    vec.pacote= c(vec.pacote, rep(0, max.len-length(vec.pacote))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    tabela.cha= c(tabela.cha, rep(0, max.len-length(tabela.cha))) #Adiciona NA no final do vetor caso nao possua o tamanho maximo.
    
    pacotes.faltantes = vec.pacote-pacotes.comprados #Cria vetor com quantas fraldas ainda faltam para comprar, dividida por tamanho.
    
    tabela.final= data.frame(round(vec.preco.pac,2), vec.gasto.total, vec.pacote.n, tabela.cha, pacotes.comprados, pacotes.faltantes, vec.sobra, row.names = c("RN", "P", "M", "G", "XG", "XXG")) #Cria a tabela com todas informaces financeiras desejadas que estara no output da funcao.
    colnames(tabela.final) <- c("Preco medio do pacote(R$)", "Custo total dos pacotes(R$)", "Pacotes necessarios", "Pacotes pedidos no cha-fralda", "Pacotes comprados", "Pacotes faltantes", "Quantas unidades que sobrarao no ultimo pacote?")#Nomeia as colunas da tabela.final.
  }

  fralda.ecologica = c(1300, 750) #Custo maximo e minimo ao comprar fraldas ecologicas.
  custo.eco = mean(fralda.ecologica) #Media no custo de fraldas ecologicas.
  economia = c((sum(vec.gasto.total)-custo.eco)) #Economia feita ao comparar o gasto de fraldas descartaveis com fraldas ecologicas.
  lixo = (sum(vec.md)+sum(vec.sobra))*0.100 #Valor estimado em Kg de lixo produzido ao utilizar fraldas descartaveis.
  
  tabela.ecologica = data.frame(sum(vec.gasto.total), formatC(poupanca,2, format="f"), poupanca-(sum(vec.gasto.total)), formatC(custo.eco,2, format="f"), economia, lixo) #Cria a tabela com informacoes ecologicas e de economia caso opte por uma fralda ecologica.
  colnames(tabela.ecologica) <- c("Gasto total em fraldas(R$)", "Valor poupado(R$)","Quanto dinheiro resta/falta(R$)", "Custo de fraldas ecologicas(R$)", "Economia em comparacao com fraldas descartaveis(R$)", "Lixo estimado produzido por fraldas descartaveis(em Kg)") #Nomeia as colunas da tabela.final.
  
  my.list = list(tabela.final, tabela.ecologica) #Cria uma lista com data.frames finais.
  return(my.list)#retorna lista de output.
}
05_curso_antigo/r2018/alunos/trabalho_final/vinicius.montagner/script.txt · Última modificação: 2020/08/12 06:04 (edição externa)