R Language
Variables
Buscar..
Variables, estructuras de datos y operaciones básicas.
En R, los objetos de datos se manipulan utilizando estructuras de datos nombradas. Los nombres de los objetos pueden llamarse "variables" aunque ese término no tiene un significado específico en la documentación oficial de R. Los nombres R distinguen entre mayúsculas y minúsculas y pueden contener caracteres alfanuméricos ( az
, Az
, 0-9
), el punto / período ( .
) Y el subrayado ( _
). Para crear nombres para las estructuras de datos, tenemos que seguir las siguientes reglas:
Los nombres que comienzan con un dígito o un guión bajo (por ejemplo,
1a
), o los nombres que son expresiones numéricas válidas (por ejemplo,.11
), o los nombres con guiones ('-') o espacios solo se pueden usar cuando se citan:`1a`
y`.11`
. Los nombres se imprimirán con backticks:list( '.11' ="a") #$`.11` #[1] "a"
Todas las demás combinaciones de caracteres alfanuméricos, puntos y guiones bajos se pueden usar libremente, donde la referencia con o sin comillas invertidas apunta al mismo objeto.
Nombres que comienzan con
.
se consideran nombres de sistema y no siempre son visibles usando la funciónls()
.
No hay restricción en el número de caracteres en un nombre de variable.
Algunos ejemplos de nombres de objetos válidos son: foobar
, foo.bar
, foo_bar
, .foobar
En R, a las variables se les asignan valores usando el operador de asignación de infijo <-
. El operador =
también se puede usar para asignar valores a variables, sin embargo, su uso adecuado es para asociar valores con nombres de parámetros en llamadas de función. Tenga en cuenta que omitir espacios alrededor de los operadores puede crear confusión para los usuarios. La expresión a<-1
se analiza como asignación ( a <- 1
) en lugar de como una comparación lógica ( a < -1
).
> foo <- 42
> fooEquals = 43
Entonces a foo
se le asigna el valor de 42
. Al escribir foo
dentro de la consola se generarán 42
, mientras que al escribir fooEquals
generarán 43
.
> foo
[1] 42
> fooEquals
[1] 43
El siguiente comando asigna un valor a la variable llamada x
e imprime el valor simultáneamente:
> (x <- 5)
[1] 5
# actually two function calls: first one to `<-`; second one to the `()`-function
> is.function(`(`)
[1] TRUE # Often used in R help page examples for its side-effect of printing.
También es posible hacer asignaciones a variables usando ->
.
> 5 -> x
> x
[1] 5
>
Tipos de estructuras de datos
No hay tipos de datos escalares en R. Los vectores de longitud-uno actúan como escalares.
- Vectores: los vectores atómicos deben ser una secuencia de objetos de la misma clase: una secuencia de números, o una secuencia de lógicos o una secuencia de caracteres.
v <- c(2, 3, 7, 10)
,v2 <- c("a", "b", "c")
son ambos vectores. - Matrices: Una matriz de números, lógica o de caracteres.
a <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow = 4, ncol = 3, byrow = F)
. Al igual que los vectores, la matriz debe estar hecha de elementos de la misma clase. Para extraer elementos de una matriz, se deben especificar filas y columnas:a[1,2]
devuelve[1] 5
que es el elemento en la primera fila, la segunda columna. - Listas: concatenación de diferentes elementos
mylist <- list (course = 'stat', date = '04/07/2009', num_isc = 7, num_cons = 6, num_mat = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), results = c(30, 19, 29, NA, 25, 26 ,27) )
. La extracción de elementos de una lista se puede hacer por nombre (si se nombra la lista) o por índice. En el ejemplo dado,mylist$results
ymylist[[6]]
obtienen el mismo elemento. Advertencia: si pruebamylist[6]
, R no le dará un error, pero extraerá el resultado como una lista. Mientras quemylist[[6]][2]
está permitido (te da 19),mylist[6][2]
te da un error. - data.frame: objeto con columnas que son vectores de igual longitud, pero (posiblemente) tipos diferentes. No son matrices.
exam <- data.frame(matr = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), res_S = c(30, 19, 29, NA, 25, 26, 27), res_O = c(3, 3, 1, NA, 3, 2, NA), res_TOT = c(30,22,30,NA,28,28,27))
. Las columnas se pueden leer por nombreexam$matr
,exam[, 'matr']
o porexam[1]
índiceexam[1]
,exam[,1]
. Las filas también se pueden leer mediante elexam['rowname', ]
nombreexam['rowname', ]
o elexam[1,]
índiceexam[1,]
. Los marcos de datos son en realidad solo listas con una estructura particular (componentes de atributo de rown e igual longitud)
Operaciones comunes y algunos consejos de precaución.
Las operaciones predeterminadas se realizan elemento por elemento. Ver ?Syntax
para las reglas de precedencia del operador. La mayoría de los operadores (y puede que otras funciones en la base R) tengan reglas de reciclaje que permiten argumentos de longitud desigual. Teniendo en cuenta estos objetos:
Objetos de ejemplo
> a <- 1
> b <- 2
> c <- c(2,3,4)
> d <- c(10,10,10)
> e <- c(1,2,3,4)
> f <- 1:6
> W <- cbind(1:4,5:8,9:12)
> Z <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1))
Algunas operaciones vectoriales
> a+b # scalar + scalar
[1] 3
> c+d # vector + vector
[1] 12 13 14
> a*b # scalar * scalar
[1] 2
> c*d # vector * vector (componentwise!)
[1] 20 30 40
> c+a # vector + scalar
[1] 3 4 5
> c^2 #
[1] 4 9 16
> exp(c)
[1] 7.389056 20.085537 54.598150
Algunas advertencias de operación de vectores!
> c+e # warning but.. no errors, since recycling is assumed to be desired.
[1] 3 5 7 6
Warning message:
In c + e : longer object length is not a multiple of shorter object length
R suma lo que puede y luego reutiliza el vector más corto para completar los espacios en blanco ... La advertencia se dio solo porque los dos vectores tienen longitudes que no son exactamente múltiplos. c + f # sin advertencia alguna.
Algunas operaciones de matriz ¡Advertencia!
> Z+W # matrix + matrix #(componentwise)
> Z*W # matrix* matrix#(Standard product is always componentwise)
Para usar una matriz multiplica: V% *% W
> W + a # matrix+ scalar is still componentwise
[,1] [,2] [,3]
[1,] 2 6 10
[2,] 3 7 11
[3,] 4 8 12
[4,] 5 9 13
> W + c # matrix + vector... : no warnings and R does the operation in a column-wise manner
[,1] [,2] [,3]
[1,] 3 8 13
[2,] 5 10 12
[3,] 7 9 14
[4,] 6 11 16
Variables "privadas"
Un punto inicial en el nombre de una variable o función en R se usa comúnmente para denotar que la variable o función está destinada a estar oculta.
Así, declarando las siguientes variables
> foo <- 'foo'
> .foo <- 'bar'
Y luego, utilizando la función ls
para enumerar objetos, solo se mostrará el primer objeto.
> ls()
[1] "foo"
Sin embargo, pasar all.names = TRUE
a la función mostrará la variable 'private'
> ls(all.names = TRUE)
[1] ".foo" "foo"