die <- function(x, fp, ali, tc, nev, vb, save) #Cria a função die com os argumentos "x", "fp", "ali", "tc", "nev" e "vb".
{
#VERIFICANDO PARÂMETROS
if(x != round(x) | x <= 0) #Verifica se x é um número inteiro positivo
{
stop("x precisa ser número inteiro positivo") #Interrompe a função mostra mensagem
}
if(nev != round (nev) | nev <= 0) #Verifica se nev é um número inteiro positivo
{
stop("nev precisa ser número inteiro positivo") #Interrompe a função mostra mensagem
}
if(length(x) != length(fp)) #Verifica se o comprimento dos vetores "x" e "fp" são iguais
{
stop("dimensões de x, e fp devem ser iguais") #Interrompe a função mostra mensagem
}
if(length(x) != length(ali) | length(x) != length(tc) | length(x) != length(nev)) #Verifica se o comprimento dos vetores "x" e "fp" são iguais
{
warning("Ciclagem de valores ocorrida") #Continua a função e mostra mensagem de "warning"
}
if(length(nev) != 1) #Verifica se o vetor "nev" tem comprimento igual a 1
{
stop("número de eventos de alimentação precisa ser único") #Para a função e mostra mensagem
}
if(vb != "s" && vb != "n") # Verifica se "vb" foi inserido corretamente
{
stop("vb deve ser s (sim), ou n (não)") #Pára a função e mostra mensagem
}
if(save != "s" && vb != "n") # Verifica se "vb" foi inserido corretamente
{
stop("save deve ser s (sim), ou n (não)") #Pára a função e mostra mensagem
}
df <- data.frame(x, fp, ali, tc, nev) #Constroi um data frame com os argumentos numéricos da função.
#MONTANDO DATA FRAMES
df1 <- matrix(nrow = length(x), ncol = nev+1) #Cria uma matriz vazia cum número de linhas igual ao número de
#grupos e número de colunas um maior que o número de eventos de alimentação
df1[,1] <- fp #Guarda o peso inicial de cada grupo na primeira coluna da matriz
for(i in 2:ncol(df1)) #Cria um ciclo da segunda coluna até o número final de colunas da matriz
{
df1[, i] <- df1[,i-1] + (df1[,i-1]*tc) # Guarda em cada coluna o peso estimado de cada grupo acrescido
} # da espectativa de engorda
df2 <- matrix(nrow = length(x), ncol = nev) #Cria uma matri resposta com número de linhas igual ao número de grupos
#e número de colunas igual ao número de eventos
df2[,1] <- df1[,1]*ali #Guarda na primeira coluna o peso total a ser oferecido na alimentação
for(j in 2: nev) #Cria um ciclo para guardar os resultados dos cálculos
{
df2[,j] <- round(df1[,j+1]*ali) #Calcula o peso do alimento a ser oferecido à partir das estimativas de peso
}
df2 <- cbind(df2, df[,1]) #Adiciona ao data frame resposta uma coluna com as quantidades de cada
#tipo de alimentação
nc <- paste("alimentação", 1:nev, sep = " ") #Guarda no objeto "nc" a repetição dos nomes das colunas
#por evento de alimentação
nl <- paste("grupo", fp, sep = " ") #Guarda no objeto "nc" a repetição dos nomes das colunas
#por evento de alimentação
colnames(df2) <- c(nc,"quantidade") #Adiciona o nome das colunas do data frame resposta
rownames(df2) <- nl #Adiciona o nome das linhas do data frame resposta
#MONTANDO CURVAS DE CRESCIMENTO
time <- 0:nev #Cria o objeto "time" com o número de eventos de alimentação
par(las = 1, tcl = 0.3) #Parâmetros para montagem dos gráficos
if(vb == "s") #Verifica se a curva desejada é "Von Bertalanffy" ou não
{
df3 <- matrix(nrow = length(x), ncol = nev+1) #Cria matriz para armazenar o resultado do cálculo de crescimento
df3[,1] <- fp #Guarda os valores de peso inicial na primeira coluna
for(k in 2:ncol(df3)) #Cria ciclo para armazenar o resultado calculado nas colunas seguintes
{
df3[,k] <- df1[,ncol(df1)]*(1-exp(-tc*(time[k]-0))) + fp #Cálculo da equação de "Von Bertalanffy"
}
for(f in 1:nrow(df3)) #Cria ciclo para plotar os gráficos
{
t <- df3[f,] #Cria um vetor "t" com os valores do peso para cada grupo
plot(time, t, pch = 19, cex = 1.3, xlab = "Evento de alimentação") #Plota o gráfico
#de crescimento pelo número de eventos
lines(time, t, lty = 1, lwd = 2) #Adiciona a curva de crescimento aos pontos do gráfico
}
} else
{
for(j in 1:nrow(df1)) #Cria ciclo para plotar os gráficos
{
v <- df1[j,] #Cria um vetor "t" com os valores do peso para cada grupo
plot(time, v, pch = 19, cex = 1.3, xlab = "Evento de alimentação") #Plota o gráfico de crescimento
#pelo número de eventos
lines(time, v, lty = 1, lwd = 2) #Adiciona a curva de crescimento aos pontos do gráfico
}
}
if(save == "s") #Verifica se deve salvar o data frame
{
write.table(df2, "die.csv", sep = ";", col.names = NA) #Salva o data frame resposta em formato csv
}
return(df2) #Devolve o data frame resposta
}