Esta primeira prática tem como objetivo:
Para começar é necessário saber o que são os objetos, pois tudo no R gira em torno deles, eles são todas as entidades criadas e manipuladas.
#Para manter seu script organizado e compreensível para você mesmo ou para outros, é importante adicionar comentários como este, adicionando um "jogo da velha" no início
x <- 5 #Para atribuir um valor ao objeto x utilizamos o sinal "<-"
X <- 8 #É importante saber que o R é sensível a diferenças maiúsculas e minúsculas
Os objetos criados ficarão armazenados no “Ambiente Global”, e poderão ser salvos em um arquivo .Rdata, caso queira mantê-los para outras análises. Se você está utilizando o RStudio, poderá observar o objeto criado e algumas de suas características em uma das janelas, se não, você pode usar a função ls() para isso.
Existem cinco diferentes modos de objetos:
- Carácter
- Numérico (números reais)
- Inteiro
- Complexo
- Lógico
cha <- "nome"
num <- 2.843
int <- 4 #Como padrão o R classifica os número como númericos, caso queira especificar como inteiro utilizar a função "as.integer()"
comp <- 2i
log <- x < X
comp #Para observar o conteúdo do objeto basta digitar seu nome
## [1] 0+2i
class(cha) #Esta função nos fala qual é a modo do objeto
## [1] "character"
Tente você identificar o modo do objeto “int”, altere-a para inteiro e em seguida faça o mesmo com o objeto “num”. Observe o resultado.
Os vetores são os objetos mais básicos, neles é possível armazenar apenas elementos de mesmo modo. Os objetos já criados (X, cha, comp, int, log, num, x) são todos vetores com apenas uma posição “ocupada”, por isso quando os vizualisamos aparece o [1] na frente, que indica a posição no vetor. Para acrescentar mais valores aos vetores criados, podemos usar a função de concatenação c().
Se você esta fazendo um script .R no RStudio e esqueceu os argumento de alguma função base, como a c(), digite “c(” e aperte a tecla “Tab” que terá algumas informações.
Também é muito útil saber que o próprio R fornece informações de todas as suas funções através da função help(), que equivale a digitar no console “?” antes do nome da função, como “?c”.
Existe também a função help.search(), que é o mesmo que utilizar “??” antes do nome da função, para procurar informações de várias formas, experimente “??c”.
?c #Pedindo ajuda para o R para ter informações sobre a função "c()", a página com as informações aparece no navegador da internet ou em uma das janelas do RStudio
cha <- c(cha, "cidade", "tal")
cha[2] #Quando queremos lidar com um elemento específico dentro do vetor basta indicar sua posição utilizando []
num <- 5:45 #Cria um vetor com a sequencia de 5 a 45 substituindo o objeto "num" que já existia
mistura <- c("nome", 1837, TRUE, 2i) #Tentativa de criar um vetor com várias classes
class(mistura) #Monstra que o R interpretou todos os objetos como sendo caracteres
Uma vez criados vetores, é possivel realizar operações matemáticas entre eles, como em uma calculadora.
Veja o que acontece quando tentamos realizar uma operação adicionando 3 ao número na posição 2 do vetor “num”.
num[2] + 3
Agora faça o mesmo com o vetor “mistura”. Por que isso acontece?
Tudo certo até agora? Podemos testar os conhecimentos adquiridos para resolver um probleminha de laboratório?
Imagine que você não armazenou corretamente suas soluções e o solvente evaporou deixando-as em concentrações desiguais de cada soluto:
C_0 <- c(0.3, 0.6, 0.7, 0.4) #Concentração em cada tubo em g/ml
V_0 <- c(3.5, 2.3, 1.7, 3.2) #Respectivos volumes em ml
Para utilizá-las na sua reação é necessário que todas tenham concentração de 0.25 g/ml. Utilize a fórmula abaixo para saber quanto de solvente será necessário adicionar para ter tal concentração.
\(C_0*V_0=C_1*V_1\)
\(V_1 = \frac{C_0*V_0}{C_1}\)
C_1 <- 0.25
V_1 <- (C_0*V_0)/C_1
V_1
## [1] 4.20 5.52 4.76 5.12
Existem outras classes de objetos que são mais complexas e têm o vetor como uma unidade de sua composição:
As data frames são um conjunto de vetores de mesmo tamanho organizados em colunas.
C_0 #Tamanho 4
length(C_0) #Para quando você perder a conta
V_0 #Tamanho 4
C_1 #Tamanho 1
C_1 <- rep(C_1, 4) #Como o vetor C_1 tem tamanho 1, a função "rep()" foi utilizada para repeti-lo 4 vezes
C_1 #Tamanho 4
V_1 #Tamanho 4
tabela1 <- data.frame(C_0 = C_0, V_0 = V_0, C_1, V_1) #Gerando a data frame
row.names(tabela1) <- c("Na", "K", "Mg", "Ca") #Além dos vetores com os valores que já obtemos anteriormente, também adicionamos um vetor com o nome dos solutos em cada solução
colnames (tabela1) <- c("Cinit", "Vinit", "Cfin", "Vfin") #Caso queira mudar o nome das colunas
class(tabela1) #Fala qual é a classe do objeto, funciona também para indicar o modo de vetores
Assim como para todos os objetos, é importante escolher nomes simples e explicativos para as colunas das data frames , o R não aceita nomes com separação por espaços.
Agora queremos saber a quantidade de soluto em gramas, para isso faremos para cada solução:
\(massa = C_1 * V_1\)
Massa <- tabela1[,3]*tabela1[,4] #Da mesma forma que fazemos com vetores podemos especificar a posição dos elementos que queremos nas data frames com [linha,coluna]
Massa <- tabela1$Cfin*tabela1$Vfin #Alternativamente podemos utilizar o simbolo "$" para indicar a coluna conforme o seu nome
#Também podemos utilizar o comando "attach"" para podermos nos referir diretamente à coluna
attach(tabela1)
Massa <- Cfin*Vfin
#Mas é importante lembrar de usar um "detach" depois, para evitar confusões futuras
detach(tabela1)
#Adicionando o novo vetor criado à tabela1 com:
cbind(tabela1, Massa) #a função "cbind()" adiciona o vetor como uma nova coluna
Para obter o total da massa dos solutos de todas as soluções:
massa_total <- sum(Massa) #A função "sum()" soma todos os elementos do vetor
Antes de partimos para a próxima prática, vamos organizar nosso ambiente de trabalho: Salvaremos a tabela1, pois precisaremos dela, e removeremos o restante dos objetos.
Para isso é necessário definir onde o arquivo .Rdata com a tabela1 será salvo no seu computador. Então verificaremos qual é o diretório de trabalho (Working Directory) atual e mudaremos para um diretório desejado:
getwd() #Verificando diretório de trabalho atual
setwd("~/Downloads/Arquivos_workshop-master/R_intro/") #Alterando o diretório de trabalho, neste caso o arquivo será salvo na mesma pasta que contém todos os arquivos para os mini-cursos
Então guardamos a tabela1:
save(tabela1, file="tabela1.Rdata", envir=.GlobalEnv) #salva objeto em arquivo .Rdata
#Caso quisessemos salvar mais de um objeto poderiamos usar:
#save(tabela1, Massa, x, file="objetos_pratica1.Rdata", envir=.GlobalEnv)
#Ou salvar todo o Ambiente Global
#save.image(file = "todos_objetos_pratica1.RData")
Agora podemos remover todos os objetos:
rm(list=ls()) #remove todos os objetos
#Caso quisessemos remover apenas alguns deles
#rm(tabela1, x, X, C_0)
Na próxima prática mostraremos como exportar os dados tabulares criados. Também veremos como importar dados para serem analisados dentro do R.
Este material faz parte do mini-curso de “Introdução ao R” do IX Workshop de Férias em Genética e Melhoramento de Plantas organizado pelos alunos de pós-graduação do programa de Genética e Melhoramento de Plantas da ESALQ-USP.