corrida=function(idade, sexo, distancia=5, duracao=4, dir="") #declara a função e seus parâmetros
{
################################
### validacao dos parâmetros ###
#idade
if ((round(idade)!=idade) || (idade<18) || (idade>60)) #verifica se arredondar idade é igual a idade, para garantir que o valor seja inteiro, além de garantir que está entre 18 e 60
{
stop("O parâmetro 'idade' deve ser um valor inteiro entre 18 e 60.") #exibe mensagem de erro e sai da função
}
#sexo
x=c("feminino", "masculino") #lista com as possibilidades
sexo=match.arg(sexo, x) #vê se o que foi passado como parâmetro se encaixa em alguma delas
if ((sexo!="feminino") && (sexo!="masculino")) #verifica o match do que foi preenchido no parâmetro
{
stop("O parâmetro 'sexo' é obrigatório e deve ser preenchido com 'feminino, fem, f' ou 'masculino, masc, m'.") #exibe mensagem de erro e sai da função
}
#distância
dist=c(5,10,16) #cria vetor com os valores para distância aceitos pela função
if (is.element(distancia, dist) == FALSE) #verifica se a distância informada é 5, 10 ou 16
{
stop("Escolher entre os seguintes valores para distância de treino: 5, 10 ou 16.") #exibe mensagem de erro e sai da função
}
#duração do treino em semanas
dur=c(4,8,12) #cria vetor com os valores para duração do treino aceitos pela função
if (is.element(duracao, dur) == FALSE) #verifica se a duracao do treino informada é 4, 8, ou 12 semanas
{
stop("Escolher entre os seguintes valores para a duração do seu treino: 4, 8 ou 12 semanas.") #exibe mensagem de erro e sai da função
}
#diretório para gravação do arquivo de output
if (dir=="") #verifica se o parâmetro foi preenchido
{
stop("O parâmetro 'diretório' é obrigatório e deve ser preenchido com o local de gravação do arquivo pdf.") #exibe mensagem de erro e sai da função
}
################################
################################
### abre PDF ###
pdf(file=paste(dir,'/Planilha_de_treino.pdf',sep=""), #caminho do arquivo PDF que será gerado
onefile=T, #armazena todos os gráficos num único arquivo
paper='A4r', #o arquivo tem tamanho A4 no formato "paisagem"
width=10, #largura: 10 inches
height=7 #altura: 7 inches
)
################################
###############################
### cálculo da FC ###
#FCM: frequência cardíaca máxima
if (sexo =="feminino") #verifica o sexo. se "feminino"
{
FCM=226-idade #cálculo estimado, baseado nas literaturas esportivas e nas referências citadas na contextualização da função
}
else #se o sexo não é "feminino", é "masculino"
{
FCM=220-idade #cálculo estimado, baseado nas literaturas esportivas e nas referências citadas na contextualização da função
}
###############################
#####################################################
### Faixa de utilização da FCM por tipo de treino ###
treino_leve=round(0.65*FCM) #Treino leve=70% da FCM, arredondado
treino_longo=round(0.80*FCM) #Treino longo=80% da FCM, arredondado
treino_tiro=round(0.90*FCM) #Treino tiro=90% da FCM, arredondado
#####################################################
#define alguns parâmetros GERAIS padrões para os gráficos
par( family="sans", #família da fonte será "sans"
cex=1.1 #tamanho será 10% a mais que o tamanho padrão
)
#########################################################################################
### G R Á F I C O S ###
#########################################################################################
#monta gráfico de barra com FCM e tipo de treino
graph=barplot( c(treino_leve, treino_longo, treino_tiro), #valores do eixo y
col=adjustcolor(c("green3", "royalblue1", "firebrick1"), alpha.f = 0.3), #define cores específicas para cada barra e a transparência
ylim=c(0,FCM), #limite do eixo y
names.arg=c("Treino Leve", "Treino Longo", "Treino de Tiro"), #nomes de cada barra (eixo x)
border="black", #cor da borda de cada barra
axes=FALSE, #não plota nem traço nem valores dos eixos
main="Frequência Cardíaca (FC) ideal\nem cada tipo de treino" #nome do gráfico
)
text( graph, #no grafico montado acima, plota:
c(treino_leve, treino_longo, treino_tiro), #na posição y
labels=c(treino_leve, treino_longo, treino_tiro), #o conteúdo (valor) de cada barra
pos=3, #define que será acima das barras
font=2, #fonte em negrito
cex=0.9 #um pouco menor (90%) do tamanho definido em par(cex=1.1)
)
#monta gráfico de linha exemplificando como deve ser um ciclo de treino de tiro (frequência cardíaca X tempo)
########################################
### definição dos parâmetros do gráfico
tempo=c(0,5,seq(from=6, to=35), 37,40) #5 minutos de aquecimento e descanso final e 10 ciclos de tiro (2 minutos fortes + 1 minuto descanso)
zona_tiro=c(round(0.85*FCM), treino_tiro) #define a zona de tiro para a FCM, que deve variar entre 85 a 95% da FCM
fr_mod=round(0.5*FCM) #frequência cardíaca da zona de exercício moderado
fr_leve=round(0.35*FCM) #frequência cardíaca da zona de exercício leve
fr=c(fr_leve, fr_mod, rep(c(zona_tiro, fr_mod), 10), 0.8*fr_mod, fr_leve) #monta vetor com as zonas de frequencia cardíaca para construção do gráfico (0.8*fr_mod é apenas para demonstrar a FC diminuindo)
########################################
### começa a desenhar o gráfico
par( lwd=2, #largura da linha
cex.axis=0.5, #diminuir proporcionalmente o tamanho do label dos eixos
tcl=-0.5, #tamanho do tick (menor que o default)
mgp=c(3,0.5,0) #distância da margem para o label dos eixos
)
plot( fr~tempo, #plota gráfico da frequência cardíaca em função do tempo
ylim=c(40, FCM), #delimita o tamanho do eixo y
xlab="Tempo do treino (em minutos)", #label do eixo x
ylab="", #sem legenda do eixo y
main="Detalhe da variação da FC\ndurante o treino de tiro", #explicação do gráfico
pch=20, #tipo de caracter que será plotado (bolinha pequena)
bty="n", #sem borda no gráfico
xaxt="n", #remove eixo x
yaxt="n" #remove eixo y
)
### montagem do eixo x
i=6 #começo do contador do loop para montar os ticks do eixo x
while(i <= 35) #loop para preencher os labels do eixo x dinamicamente
{ #loop vai diferenciar os dois minutos do tiro e um minuto no descanso nos ticks do eixo x
axis(1, at=i, tck=0.02, mgp=c(0,-1.5,0), tcl=0.5) #primeiro minuto no treino de tiro, tick e label internos
i=i+1 #acrescenta 1 no contador
axis(1, at=i, tck=0.02, mgp=c(0,-1.5,0), tcl=0.5) #segundo minuto no treino de tiro, tick e label internos
i=i+1 #acrescenta 1 no contador
axis(1, at=i, tck=NA) #último minuto, descanso - tick e label de volta pra fora do plot
i=i+1 #acrescenta 1 no contador
}
axis(1, at=seq(5,35, by=30), labels=F) #traça só a linha do eixo X, sem label nem ticks
axis(1, at=seq(0,5, by=5)) #marca os primeiros 5 minutos de aquecimento
axis(1, at=seq(35,40, by=5)) #marca os últimos 5 minutos de resfriamento
### conexão dos pontos plotados (liga os pontos)
lines(tempo[1:2], fr[1:2], col="royalblue1") #conecta os pontos iniciais (fora do trecho do treino de tiro)
lines(tempo[2:32],fr[2:32], col="firebrick1") #conecta os pontos do treino de tiro
lines(tempo[32:34], fr[32:34], col="royalblue1") #conecta os últimos pontos do gráfico
rect(5.5, 44, 34.6, 37.5, lwd=1, border="firebrick1", lty="dashed") #desenha um retângulo na zona de maior intensidade do treino de Tiro
require(plotrix) #carrega o pacote plotrix para usar a função boxed.labels()
boxed.labels( #destaca a zona de tiro no gráfico
x=20, #posição com relação ao eixo x
y=50, #posição com relação ao eixo y
"Aumentar a intensidade do treino durante os minutos destacados", #texto exibido
cex=0.7, #fonte 30% menor que a padrão
border=F, #sem borda
col="black",
bg="white" #cor de fundo: branco
)
### delimita a zona de tiro traçando linhas tracejadas
segments( #desenha linha preta tracejada mais fina no limite debaixo da zona de tiro
tempo[1], #coordenada x inicial
zona_tiro[1:1], #coordenada y inicial
tempo[length(tempo)], #coordenada x final
zona_tiro[1:1], #coordenada y final
lty=2, #linha tracejada
lwd=1 #linha mais fina que o padrão definido anteriormente
)
segments( #desenha linha preta tracejada mais fina no limite de cima da zona de tiro
tempo[1], #coordenada x inicial
zona_tiro[2:2], #coordenada y inicial
tempo[length(tempo)], #coordenada x final
zona_tiro[2:2], #coordenada y final
lty=2, #linha tracejada
lwd=1 #linha mais fina que o padrão definido anteriormente
)
segments( #desenha linha preta tracejada mais fina no limite debaixo da zona de descanso
tempo[1], #coordenada x inicial
fr_mod, #coordenada y inicial
tempo[length(tempo)], #coordenada x final
fr_mod, #coordenada y final
lty=2, #linha tracejada
lwd=1 #linha mais fina que o padrão definido anteriormente
)
### escreve no gráfico onde é a zona de tiro e descanso para recuperação
boxed.labels( #destaca a zona de tiro no gráfico
tempo[1], #localização vertical do box
(mean(zona_tiro)), #localização horizontal do box
paste("Zona de tiro \n FC: ", zona_tiro[1:1], "~", zona_tiro[2:2], "bpm"), #texto exibido
cex=0.7, #fonte 30% menor que a padrão
border=F, #sem borda
bg="white", #cor de fundo: branco
col="firebrick1" #cor da fonte: vermelho firebrick1
)
boxed.labels( #destaca a zona de descanso/recuperação no gráfico
tempo[1], #localização vertical do box
mean(c(fr_mod,zona_tiro[1:1])), #localização horizontal do box
paste("Descanso para recuperação \n FC deve diminuir para ~ ", fr_mod, "bpm"), #texto exibido
cex=0.7, #fonte 30% menor que a padrão
border=F, #sem borda
bg="white", #cor de fundo: branco
col="firebrick1" #cor da fonte: vermelho firebrick1
)
#algumas legendas importantes
boxed.labels( #legenda do primeiro ponto do gráfico
tempo[1], #localização vertical do box
fr_leve-5, #localização horizontal do box
paste("FC ~",fr_leve), #texto exibido
cex=0.7, #fonte 30% menor que a padrão
border=F #sem borda
)
boxed.labels( #legenda do último ponto do gráfico (igual anterior)
tempo[length(tempo)], #localização vertical do box
fr_leve-5, #localização horizontal do box
paste("FC ~",fr_leve), #texto exibido
cex=0.7, #fonte 30% menor que a padrão
border=F #sem borda
)
boxed.labels( #legenda do penúltimo ponto do gráfico (igual anterior)
tempo[length(tempo)-2], #localização vertical do box
(0.8*fr_mod)-5, #localização horizontal do box
paste("FC ~",0.8*fr_mod), #texto exibido
cex=0.7, #fonte 30% menor que a padrão
border=F #sem borda
)
boxed.labels( #legenda do primeiro ponto da zona de descanso/recuperação
tempo[1], #localização vertical do box
fr_mod-5, #localização horizontal do box
paste("FC ~",fr_mod),#texto exibido
cex=0.7, #fonte 30% menor que a padrão
border=F #sem borda
)
#montadem dos treinos
if (duracao==4) #4 semanas de duracao do treino até a prova
{
treino=read.table("treinos_4.csv", as.is=T, header=T, sep=";", check.names=F) #carrega o arquivo com as definicoes de treino para 4 semanas de duração
}
else if (duracao==8) #8 semanas de duracao do treino até a prova
{
treino=read.table("treinos_8.csv", as.is=T, header=T, sep=";", check.names=F) #carrega o arquivo com as definicoes de treino para 8 semanas de duração
}
else #12 semanas de duracao do treino até a prova
{
treino=read.table("treinos_12.csv", as.is=T, header=T, sep=";", check.names=F) #carrega o arquivo com as definicoes de treino para 12 semanas de duração
#par(cex=0.9, cex.main=1.2) #como o gráfico vai ser um pouco maior, diminui um pouco o tamanho de todos os labels
}
#verifica a distancia da prova para buscar o treino
if (distancia==5) #prova de 5 quilômetros (5K) como objetivo final do treino
{
#monta tabela com o treino de 5k
treino=treino[,1:3] #atualiza data.frame com os treinos para 5K
}
else if (distancia==10) #prova de 10 quilômetros (10K) como objetivo final do treino
{
treino=treino[,c(1,2,4)] #atualiza data.frame com os treinos para 10k
}
else #prova de 16 quilômetros (16K) como objetivo final do treino
{
treino=treino[,c(1,2,5)] #atualiza data.frame com os treinos para 16k
}
dias_semana=unique(treino$dias) #dias da semana de acordo com a duração do treino
qtde_dias=length(dias_semana) #conta o tamanho do vetor para dias da semana distintos (quantos dias da semana são utilizados no treino)
#monta o gráfico
plot( x=NULL, y=NULL, #plota gráfico sem informação
xlim=c(1,duracao+3), #delimita o tamanho do eixo x
ylim=c(1,qtde_dias+1), #delimita o tamanho do eixo y
type="n", #não plota
xaxt="n", yaxt="n", #sem desenhar eixo x e y
xlab="", ylab="", #sem label de eixo x e y
bty="n", #sem borda
main=paste("Treino de",duracao,"semanas para prova de",distancia,"K") #título do gráfico
)
segments( #desenha linha preta no gráfico separando a primeira coluna (esq)
1, #coordenada x inicial
1, #coordenada y inicial
1, #coordenada x final
qtde_dias+1, #coordenada y final
lwd=1 #linha mais fina que o padrão definido anteriormente
)
segments( #desenha linha preta no gráfico separando a primeira coluna (dir) -- primeira coluna é mais larga
3, #coordenada x inicial
1, #coordenada y inicial
3, #coordenada x final
(qtde_dias+1), #coordenada y final
lwd=1 #linha mais fina que o padrão definido anteriormente
)
i=4 #inicia o contador do loop (em 4 pq já desenhou as duas primeiras linhas até a coord 3 do eixo x)
dur=duracao+3 #soma 3 para desconsiderar as 3 coord do eixo x
while (i <= (dur)) #desenha os últimos traços separando as colunas
{
segments( #desenha linha preta no gráfico
i, #coordenada x inicial
1, #coordenada y inicial
i, #coordenada x final
qtde_dias+1, #coordenada y final
lwd=1 #linha mais fina que o padrão definido anteriormente
)
mtext(side=3, at=(i-0.5), text=paste("Semana", i-3), cex=0.6) #acima do gráfico, na margem superior, informa qual a semana do treino
i=i+1 #atualiza o valor do contador
}
i=1 #inicia o contador do loop
while (i <= (qtde_dias+1)) #desenha as linhas do gráfico
{
segments( #desenha linha preta no gráfico
1, #coordenada x inicial
i, #coordenada y inicial
dur, #coordenada x final
i, #coordenada y final
lwd=1 #linha mais fina que o padrão definido anteriormente
)
i=i+1 #atualiza o valor do contador
}
par(cex=0.8) #diminui um pouco o tamanho da fonte para caber dentro dos quadros desenhados
i=1 #inicia o contador do loop
j=qtde_dias #inicia o contador para plotar o texto no gráfico
while (i <= qtde_dias) #preenche no quadro os dias do treino
{
if (is.element("segunda",dias_semana)) #se o vetor tiver o valor 'segunda', entra nessa condicional
{
dia="Segunda-feira" #define o dia da semana que será escrito no gráfico
dias_semana=dias_semana[-(which(dias_semana=="segunda"))] #remove essa informação do vetor... dessa forma consigo plotar no gráfico os dias da semana na ordem certa
###########################################
### W A R N I N G ###
#essa parte poderia ser uma outra função #
# menor, mas não sabia se poderia criar #
# duas no mesmo arquivo, então o código #
# está repetido #
###########################################
x=1 #inicia o contador do loop
while (1==1) #sem controle de loop no while, o controle é interno, por isso, 1==1
{
if (treino[x,2]=="segunda") #varre o data.frame procurando as "segunda"s
{
k=treino[x,1]+2.5 #define a coordenada do eixo x
if (treino[x,3]=="Leve") cor="green3" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Longo") cor="royalblue1" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Tiro") cor="firebrick1" #segue o padrão de cor de acordo com cada treino
else cor="green3" #cor diferente para o último dia do treino
text(x=k, y=((j)+0.5), labels=treino[x,3], col=cor, font=4) #preenche o treino das segundas-ferias
}
x=x+1 #atualiza o valor do contador
if (x>nrow(treino)) #se o contador ultrapassou a quantidade de linhas do data.frame
{
break #termina o loop
}
}
}
else if (is.element("terca",dias_semana)) #se o vetor tiver o valor 'terca', entra nessa condicional
{
dia="Terça-feira" #define o dia da semana que será escrito no gráfico
dias_semana=dias_semana[-(which(dias_semana=="terca"))] #remove essa informação do vetor... dessa forma consigo plotar no gráfico os dias da semana na ordem certa
x=1 #inicia o contador do loop
while (1==1) #sem controle de loop no while, o controle é interno, por isso, 1==1
{
if (treino[x,2]=="terca") #varre o data.frame procurando as "terca"s
{
k=treino[x,1]+2.5 #define a coordenada do eixo x
if (treino[x,3]=="Leve") cor="green3" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Longo") cor="royalblue1" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Tiro") cor="firebrick1" #segue o padrão de cor de acordo com cada treino
else cor="orangered" #cor diferente para o último dia do treino
text(x=k, y=((j)+0.5), labels=treino[x,3], col=cor, font=4) #preenche o treino das terças-ferias
}
x=x+1 #atualiza o valor do contador
if (x>nrow(treino)) #se o contador ultrapassou a quantidade de linhas do data.frame
{
break #termina o loop
}
}
}
else if (is.element("quarta",dias_semana)) #se o vetor tiver o valor 'quarta', entra nessa condicional
{
dia="Quarta-feira" #define o dia da semana que será escrito no gráfico
dias_semana=dias_semana[-(which(dias_semana=="quarta"))] #remove essa informação do vetor... dessa forma consigo plotar no gráfico os dias da semana na ordem certa
x=1 #inicia o contador do loop
while (1==1) #sem controle de loop no while, o controle é interno, por isso, 1==1
{
if (treino[x,2]=="quarta") #varre o data.frame procurando as "quarta"s
{
k=treino[x,1]+2.5 #define a coordenada do eixo x
if (treino[x,3]=="Leve") cor="green3" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Longo") cor="royalblue1" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Tiro") cor="firebrick1" #segue o padrão de cor de acordo com cada treino
else cor="orangered" #cor diferente para o último dia do treino
text(x=k, y=((j)+0.5), labels=treino[x,3], col=cor, font=4) #preenche o treino das quartas-ferias
}
x=x+1 #atualiza o valor do contador
if (x>nrow(treino)) #se o contador ultrapassou a quantidade de linhas do data.frame
{
break #termina o loop
}
}
}
else if (is.element("quinta",dias_semana)) #se o vetor tiver o valor 'quinta', entra nessa condicional
{
dia="Quinta-feira" #define o dia da semana que será escrito no gráfico
dias_semana=dias_semana[-(which(dias_semana=="quinta"))] #remove essa informação do vetor... dessa forma consigo plotar no gráfico os dias da semana na ordem certa
x=1 #inicia o contador do loop
while (1==1) #sem controle de loop no while, o controle é interno, por isso, 1==1
{
if (treino[x,2]=="quinta") #varre o data.frame procurando as "quinta"s
{
k=treino[x,1]+2.5 #define a coordenada do eixo x
if (treino[x,3]=="Leve") cor="green3" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Longo") cor="royalblue1" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Tiro") cor="firebrick1" #segue o padrão de cor de acordo com cada treino
else cor="orangered" #cor diferente para o último dia do treino
text(x=k, y=((j)+0.5), labels=treino[x,3], col=cor, font=4) #preenche o treino das quintas-ferias
}
x=x+1 #atualiza o valor do contador
if (x>nrow(treino)) #se o contador ultrapassou a quantidade de linhas do data.frame
{
break #termina o loop
}
}
}
else if (is.element("sexta",dias_semana)) #se o vetor tiver o valor 'sexta', entra nessa condicional
{
dia="Sexta-feira" #define o dia da semana que será escrito no gráfico
dias_semana=dias_semana[-(which(dias_semana=="sexta"))] #remove essa informação do vetor... dessa forma consigo plotar no gráfico os dias da semana na ordem certa
x=1 #inicia o contador do loop
while (1==1) #sem controle de loop no while, o controle é interno, por isso, 1==1
{
if (treino[x,2]=="sexta") #varre o data.frame procurando as "sexta"s
{
k=treino[x,1]+2.5 #define a coordenada do eixo x
if (treino[x,3]=="Leve") cor="green3" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Longo") cor="royalblue1" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Tiro") cor="firebrick1" #segue o padrão de cor de acordo com cada treino
else cor="orangered" #cor diferente para o último dia do treino
text(x=k, y=((j)+0.5), labels=treino[x,3], col=cor, font=4) #preenche o treino das sextas-ferias
}
x=x+1 #atualiza o valor do contador
if (x>nrow(treino)) #se o contador ultrapassou a quantidade de linhas do data.frame
{
break #termina o loop
}
}
}
else if (is.element("sabado",dias_semana)) #se o vetor tiver o valor 'sabado', entra nessa condicional
{
dia="Sábado" #define o dia da semana que será escrito no gráfico
dias_semana=dias_semana[-(which(dias_semana=="sabado"))] #remove essa informação do vetor... dessa forma consigo plotar no gráfico os dias da semana na ordem certa
x=1 #inicia o contador do loop
while (1==1) #sem controle de loop no while, o controle é interno, por isso, 1==1
{
if (treino[x,2]=="sabado") #varre o data.frame procurando os "sabado"s
{
k=treino[x,1]+2.5 #define a coordenada do eixo x
if (treino[x,3]=="Leve") cor="green3" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Longo") cor="royalblue1" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Tiro") cor="firebrick1" #segue o padrão de cor de acordo com cada treino
else cor="orangered" #cor diferente para o último dia do treino
text(x=k, y=((j)+0.5), labels=treino[x,3], col=cor, font=4) #preenche o treino dos sábados
}
x=x+1 #atualiza o valor do contador
if (x>nrow(treino)) #se o contador ultrapassou a quantidade de linhas do data.frame
{
break #termina o loop
}
}
}
else #se o vetor tiver o valor 'domingo', entra nessa condicional (else, pq só pode ser domingo agora...)
{
dia="Domingo" #define o dia da semana que será escrito no gráfico
dias_semana=dias_semana[-(which(dias_semana=="domingo"))] #remove essa informação do vetor... dessa forma consigo plotar no gráfico os dias da semana na ordem certa
x=1 #inicia o contador do loop
while (1==1) #sem controle de loop no while, o controle é interno, por isso, 1==1
{
if (treino[x,2]=="domingo") #varre o data.frame procurando os "domingo"s
{
k=treino[x,1]+2.5 #define a coordenada do eixo x
if (treino[x,3]=="Leve") cor="green3" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Longo") cor="royalblue1" #segue o padrão de cor de acordo com cada treino
else if (treino[x,3]=="Tiro") cor="firebrick1" #segue o padrão de cor de acordo com cada treino
else cor="orangered" #cor diferente para o último dia do treino
text(x=k, y=((j)+0.5), labels=treino[x,3], col=cor, font=4) #preenche o treino ou prova do domingo
}
x=x+1 #atualiza o valor do contador
if (x>nrow(treino)) #se o contador ultrapassou a quantidade de linhas do data.frame
{
break #termina o loop
}
}
}
text(x=2, y=((j)+0.5), labels=dia, font=2) #preenche os dias da semana
i=i+1 #atualiza o valor do contador
j=j-1 #atualiza o valor do contador (vai diminuindo a medida que os dias vão sendo plotados no gráfico)
}
dev.off() #fecha o arquivo PDF
#####################################################################################
### O U T P U T ###
#####################################################################################
output=matrix(c(fr_leve, fr_mod, FCM), ncol=3)
colnames(output)=c("FC treino Leve", "FC treino Moderado", "FC Máxima")
rownames(output)="(bpm)"
return(output) #retorna o valor da frequencia cardíaca leve, moderada e da FCM em uma tabela simples
}