R (linguagem de programação)/Objetos

Um objeto é qualquer coisa que pode ser associado (e armazenado) em uma variável.

As variáveis em R não são predefinidas; elas assumem o tipo do objeto que for atribuído a elas.

Assim, uma instrução do tipo:

x <- 1

atribui a x o valor (inteiro) 1, e é perfeitamente válido reatribuir:

x <- 2.5
x <- NULL

Aqui, NULL é a variável vazia. x <- NULL não destrói x (como pode ser visto escrevendo-se exists("x") - que retorna TRUE), mas faz x ter um valor que não é nada.

Os principais tipos de objeto são:

  • Vetores: uma lista de elementos, sendo todos eles NULL, raw, lógico, inteiro, real, complexo, string, lista ou expressão. Caso a lista seja criada com uma mistura destes tipos, os mais simples serão convertidos para os mais complexos.
  • Matrizes: semelhante a vetores, mas em duas dimensões.
  • Arrays: semelhantes a matrizes, mas podem ter mais dimensões.
  • Listas: semelhante a vetores, mas seus elementos podem ser de tipos diferentes - inclusive outras listas.
  • Funções: uma função é um objeto como qualquer outro - pode-se inclusive definir funções anônimas, como nas linguagens funcionais.

Estes tipos serão vistos mais adiante:

  • Fatores: parecido com vetores, mas incluem níveis.
  • Dataframes: semelhante a matriz, mas com alguma estrutura a mais.
  • Classes: usadas na programação orientada a objetos.

Vetores

editar

Um vetor é uma lista de elementos sendo todos do mesmo tipo.

A função c

editar

A função que cria vetores a partir de escalares (ou vetores) é c:

> x <- c(1, 2, 3)

cria uma variável x do tipo vetor (de inteiros) com três elementos.

Estes elementos são numerados a partir do um (como em Basic, Pascal, etc) e não a partir do zero (como em C, C++, etc):

> x[1]
[1] 1

Deve-se notar que não existe diferença entre um escalar e um vetor de dimensão um:

> y <- 1
> y
[1] 1

Este é um cuidado que deve ser tomado sempre ao trabalhar-se com vetores e matrizes: sempre que uma dimensão se torna um, esta dimensão é colapsada.

A função c pode ser usada para concatenar vetores:

> x <- c(c(1, 2), c(10, 11))
> x
[1]  1  2 10 11

Criação de vetores vazios

editar

Basta declarar o tipo e colocar o tamanho entre parêntesis.

Exemplos:

> numeric(5)  # vetor de 5 zeros numéricos
> integer(3)  # vetor com 3 zeros inteiros

rep repete um elemento n vezes:

> x <- rep(0.5, 10)
> x
 [1] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5

rep também pode ser usado para repetir um vetor:

> x <- rep(c(1,2), 3)
> x
[1] 1 2 1 2 1 2

rep também pode ser usado para repetir vetorialmente. Isto é melhor explicado com um exemplo:

> x <- rep(c(10, 11), c(2, 3))
> x
[1] 10 10 11 11 11

Neste exemplo, o primeiro elemento da repetição (2) foi aplicado ao primeiro exemplo do vetor (10), e o segundo elemento da repetição (3) ao segundo elemento do vetor (11).

seq cria um vetor que é uma sequência de números. Quando o passo é um, pode-se usar :. Exemplos:

> seq(3, 5)
> seq(3, 15, by=2)
> 1:10
> (-10):(-5) # cuidado com os parênteses!
> 6:2
> seq(1, 1000, length=10)
> seq(1, 1000, length=9) # repare que a sequência assume valores reais e não inteiros