Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2018:alunos:trabalho_final:jessica_corsso:diveplan

diveplan

Antes de começar a usar a função, você vai precisar salvar em seu diretório de trabalho 3 tabelas, correspondentes à tabela RDP (Recreational Dive Planner): merg1.csv, merg2.csv e merg3.csv.

 
diveplan <- function(n=2, p, trf)   #criando a função diveplan, com os argumentos n=numero de mergulhos, p=profuundidades pretendidas e trf=tempo de fundo.
{
  #Esta etapa fará a verificação dos parâmetros
  if(n>2)  #verificar se n>2)
  {
    stop("Esta função foi desenvolvida apenas para 2 mergulhos consecutivos no momento, há intenção de apliar sua aplicação em breve. Por enquanto use-a apenas em caso de n=2") #se n for maior que dois, a função para e retorna a mensagem que está entre parentes
  }
  
  if(all(diff(p)>0)) #verificar se o vetor profundidade segue a ordem decrescente
  {
    warning("Para sua segurança é recomendado que seus mergulhos obedeçam a ordem decrescente de profundidades") #se if igual a TRUE, retorna uma mensagem de aviso ao usuário
  }
  
  if(any(p>30))  #verificar se algum valor do vetor profundidade é maior do que 30
  {
    stop("A profundidade deve ser menor do que 30 metros") #se if igual a TRUE, para a função e retorma a mensagem entre parenteses
  }

  # Aqui vamos ler a primeira tabela, procurando profundidade e tempo que foram informados pelo usuário
  # Esta parte se refere ao primeiro mergulho do usuário
  merg1<-read.table("merg1.csv", sep=",", na.strings = "NA", row.names = 1)  #lê a tabela merg1 do diretório
  
  p1 <- matrix(NA,ncol=n)  #Cria uma matriz p1 preenchida por NA com o número de colunas igual a n (número de mergulhos)
  p1 <- as.vector(p1)  #transforma a matriz p1 em um vetor
 
  p1[1]<-which(merg1[1,]>= p[1])[1] #armazena na posição 1 do vetor p1 a posição (numero da coluna) da tabela da primeira profundidade fornecida pelo usuário, ou a maior mais próxima caso não haja correspondência com a tabela
  p1[2]<-which(merg1[1,]>= p[2])[1] #armazena na posição 2 do vetor p1 a posição (numero da coluna) da tabela da segunda profundidade fornecida pelo usuário, ou a maior mais próxima caso não haja correspondência com a tabela
  
  t1 <- matrix(NA,ncol=n)  #Cria uma matriz t1 preenchida por NA com o número de colunas igual a n (número de mergulhos)
  t1 <- as.vector(t1)  #transforma a matriz t1 em um vetor
  
  t1[1]<-which(merg1[,p1[1]]>= trf[1])[1]  #Armazena na posição 1 do vetor t1 o valor onde há correspondencia entre o trf informado pelo usuário e o trf disponível na tabela merg1
                                           #Caso não aja correspondência, armazena o valor maior mais próximo do que o usuário forneceu
  
  # A partir daqui, procuramos na tabela 3 os dados referentes ao segundo mergulho do usuário
  
  merg3 <-read.table("merg3.csv", sep=",", na.strings = "NA", header = TRUE, row.names = 1)  #lê a tabela merg3 do diretório
  
  t1[2] <- which(merg3[p1[2],]<= trf[2])[1] #armazena na posição 2 de t1 a posição da coluna onde há correspondencia entre o trf informado pelo usuário e o trf disponível na tabela merg1
                                            #Caso não aja correspondência, armazena o valor maior mais próximo do que o usuário forneceu
                                            #Neste caso foi usado menor igual pois a tabela está em ordem decrescente
  
  #Agora com os dados dos 2 mergulhos lidos, é hora de encontrar na tabela de créditos de intervalo de superfície qual é o tempo mínimo de superfície entre os mergulhos
  merg2 <-read.table("merg2.csv", sep=",", na.strings = "NA", header = TRUE)  #lê a tabela merg2 do diretório
  
  t_min <- merg2[(t1[1]-1), (t1[2])] #cria o objeto t_min que corresponde ao tempo mínimo que o mergulhador deve ficar na superfície entre seus 2 mergulhos
                                      #o tempo mínimo vai ser lido da tabela merg 2, na linha t1[1]-1 e na coluna t1[2]
                                      
  if(is.na(t_min)) #verifica se t_min é NA
  {
    t_min <- paste("Você excedeu o tempo máximo permitido em uma das profundidades, diminua o tempo de mergulho e reinicie o seu planejamento") #define t_min como um aviso ao usuário, para recomeçar o planejamento dos mergulhos, caso t_min seja igual à NA.
  }
  
  return(paste("O tempo mínimo que você deve ficar na superfície entre seus 2 mergulhos é: ", t_min, "(h:min)")) #retorna ao usuário o tempo mínimo de superfície entre seus 2 mergulhos
  
  
}
05_curso_antigo/r2018/alunos/trabalho_final/jessica_corsso/diveplan.txt · Última modificação: 2020/08/12 06:04 (edição externa)