Tipos de datos en R con ejemplo

⚡ Resumen inteligente

En R, los tipos de datos definen cómo se almacenan los valores en la memoria, y los operadores determinan qué puede hacer R con ellos. Aquí se abordan los vectores, las variables y los operadores aritméticos, relacionales, lógicos y de asignación, con ejemplos prácticos.

  • 🔘 AtomTipos de circuitos integrados: R almacena cada valor como lógico, entero, doble, complejo, carácter o sin formato.
  • ☑️ Comprobación de tipos: class(), typeof() y mode() describen un valor desde tres ángulos diferentes.
  • ✅ Vectores: La función c() crea una colección unidimensional en la que cada elemento comparte un mismo tipo.
  • 🧪 Operatores: Los operadores aritméticos, relacionales, lógicos y de asignación cubren prácticamente todas las expresiones básicas de R.
  • 🛠️ Subconjunto: Los corchetes combinados con una condición lógica filtran los elementos de un vector en una sola línea.
  • ⚠️ Nota de versión: R 4.3.0 convirtió un argumento de longitud mayor que uno para && o || en un error.

Tipos de datos en R

¿Cuáles son los tipos de datos en R?

A continuación se muestran los tipos de datos o estructuras de datos en la programación R:

Esa lista mezcla dos ideas relacionadas, y separarlas facilita la comprensión del resto de esta página. tipo de datos describe qué es un valor único: un número, un fragmento de texto, un VERDADERO o un FALSO. estructura de datos Describe cuántos valores se mantienen juntos y en qué forma. Los escalares, vectores, matrices, marcos de datos y listas son estructuras; los valores que contienen pertenecen a uno de los tipos básicos de R.

Estructura Dimensiones ¿Se permiten tipos mixtos? Uso típico
Escalar Vector de longitud 1 No Una sola medida o bandera
Vector 1 No Una columna de lecturas de un solo tipo
Matrix 2 No Rejillas numéricas y álgebra lineal
Marco de datos 2 Sí, un tipo por columna. conjuntos de datos tabulares
Lista 1, pero anidable Sí, cualquier cosa por elemento Resultados del modelo y contenedores mixtos

R no tiene un tipo de escalar separado: un escalar es simplemente un vector de longitud uno, razón por la cual gran parte del código R se escribe para vectores completos a la vez.

Tipos de datos básicos en R

Cada valor en R pertenece a uno de un pequeño conjunto de tipos básicos (atómicos):

  • 4.5 es un valor decimal llamado numérico.
  • El número 4 parece un número entero, pero R lo almacena como un número de punto flotante de doble precisión. Escribe 4L cuando se requiera un número entero verdadero.
  • VERDADERO o FALSO es un valor booleano, llamado valor lógico en R.
  • El valor dentro de ” ” o ' ' es texto (una cadena). Esos valores se llaman caracteres.

Otros dos tipos completan el conjunto. Los valores complejos, como 3+2i, contienen una parte real y una imaginaria, y los valores sin procesar contienen bytes. Ambos aparecen raramente en el análisis cotidiano, pero están listados en la base R. Documentación de typeof() junto con los cuatro tipos comunes.

Tipo Valor de ejemplo clase() devuelve typeof() devuelve
lógico VERDADERO lógico lógico
Entero 4L entero entero
Double (numérico) 4.5 numérico doble
Caracter "R es fantástico" personaje personaje
Complejo 3+2i integraciones integraciones
Crudo como.raw(10) crudo crudo

Podemos comprobar el tipo de una variable con la función de clase.

Ejemplo 1: Comprobar una variable numérica

# Declare variables of different types
# Numeric
x <- 28
class(x)

Salida:

## [1] "numeric"

Ejemplo 2: Comprobar una variable de tipo carácter

# String
y <- "R is Fantastic"
class(y)

Salida:

## [1] "character"

Ejemplo 3: Comprobar una variable lógica

# Boolean
z <- TRUE
class(z)

Salida:

## [1] "logical"

Nótese que class() devuelve "numeric" para 28, aunque 28 no tenga parte decimal. R lo almacenó como un double, y solo typeof() lo revela. La siguiente diferencia que vale la pena conocer es cómo se asignan nombres a esos valores.

Variables en R

Las variables son uno de los componentes básicos de R para almacenar valores, y son fundamentales para cualquier persona que trabaje en ciencia de datos. Una variable en R puede almacenar un número, un objeto, un resultado estadístico, un vector, un conjunto de datos o una predicción de un modelo; básicamente, cualquier resultado que R pueda generar. Posteriormente, podemos usar esa variable simplemente llamando a su nombre.

Para declarar una variable en R, necesitamos asignarle un nombre. El nombre no debe contener espacios. Podemos usar _ para unir dos palabras.

Los nombres pueden contener letras, dígitos, puntos y guiones bajos, pero deben comenzar con una letra o un punto. No se pueden usar palabras reservadas como TRUE, FALSE y NULL. Para agregar un valor a la variable, use <- o =.

Aquí está la sintaxis:

# First way to declare a variable:  use the `<-`
name_of_variable <- value
# Second way to declare a variable:  use the `=`
name_of_variable = value

En la línea de comandos, podemos escribir los siguientes códigos para ver qué sucede:

Ejemplo 1: Asignar un valor e imprimirlo.

# Print variable x
x <- 42
x

Salida:

## [1] 42

Ejemplo 2: Declarar una segunda variable

y  <- 10
y

Salida:

## [1] 10

Ejemplo 3: Usar dos variables en una misma expresión

# We call x and y and apply a subtraction
x-y

Salida:

## [1] 32

Una variable que contiene varios valores del mismo tipo es un vector, que es la estructura que prácticamente todas las funciones de R esperan.

Vectores en R

Un vector es una colección unidimensional en la que todos los elementos son del mismo tipo. Podemos crear un vector con todos los tipos de datos básicos de R que vimos anteriormente. La forma más sencilla de crear un vector en R es usar la función c().

Ejemplo 1: Crear un vector numérico

# Numerical
vec_num <- c(1, 10, 49)
vec_num

Salida:

## [1]  1 10 49

Ejemplo 2: Crear un vector de caracteres

# Character 
vec_chr <- c("a", "b", "c")
vec_chr

Salida:

## [1] "a" "b" "c"

Ejemplo 3: Crear un vector lógico

# Boolean 
vec_bool <-  c(TRUE, FALSE, TRUE)
vec_bool

Salida:

##[1] TRUE FALSE TRUE

Si c() recibe una mezcla de tipos, no falla. Convierte silenciosamente cada elemento al tipo más general presente, de modo que c(1, "a", TRUE) se convierte en un vector de caracteres. También podemos realizar cálculos aritméticos con vectores en R.

Ejemplo 4: Sumar dos vectores elemento por elemento.

# Create the vectors
vect_1 <- c(1, 3, 5)
vect_2 <- c(2, 4, 6)
# Take the sum of A_vector and B_vector
sum_vect <- vect_1 + vect_2
# Print out total_vector
sum_vect

Salida:

[1]  3  7 11

La suma se realizó elemento por elemento porque ambos vectores tienen la misma longitud. Cuando las longitudes difieren, R reutiliza el vector más corto, repitiéndolo hasta que coincida con el más largo, y solo emite una advertencia cuando la longitud mayor no es un múltiplo de la menor.

Ejemplo 5: Dividir los primeros cinco elementos

En R, es posible segmentar un vector. En algunas ocasiones, solo nos interesan los primeros cinco elementos de un vector. Podemos usar el comando [1:5] para ello.tract los valores del 1 al 5.

# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]

Salida:

## [1] 1 2 3 4 5

Ejemplo 6: Crear un rango con dos puntos Operator

La forma más sencilla de crear un rango de valores es usar el operador de dos puntos (:) entre dos números. Por ejemplo, en el ejemplo anterior, podemos escribir c(1:10) para crear un vector de valores del uno al diez.

# Faster way to create adjacent values
c(1:10)

Salida:

## [1]  1  2  3  4  5  6  7  8  9 10

Dado que un vector cambia de tipo silenciosamente al ser mezclado, conviene saber cómo inspeccionar y convertir los tipos según sea necesario.

Cómo comprobar y convertir tipos de datos en R

Tres familias de funciones responden a las tres preguntas que surgen constantemente: ¿qué es esto?, ¿es esto un tipo dado?, y ¿puede esto convertirse en otro tipo?

Familia de funciones Pregunta que responde Ejemplos
clase(), tipo(), modo() ¿Qué tipo de valor es este? clase(28), tipo(28), modo(28)
es.*() ¿Este valor es de tipo X? es.numérico(), es.caracter(), es.lógico()
como.*() ¿Puede este valor convertirse en tipo X? como.numérico(), como.carácter(), como.entero()
str () ¿Qué aspecto tiene este objeto en general? str(vec_num)
# Three different views of the same value
x <- 28
class(x)      # "numeric"  -- the class used for method dispatch
typeof(x)     # "double"   -- how R stores the value internally
mode(x)       # "numeric"  -- the older S-style mode

# Ask a yes/no question about a type
is.numeric(x)     # TRUE
is.character(x)   # FALSE

# Convert between types
as.character(x)   # "28"
as.integer("28")  # 28 stored as an integer
as.numeric("abc") # NA, with a coercion warning

Dos reglas explican la mayoría de las sorpresas aquí. Primero, class() informa la clase utilizada para el despacho del método, mientras que typeof() informa el almacenamiento interno, razón por la cual 28 es "numérico" para uno y "doble" para el otro. Segundo, una conversión que no puede tener éxito no detiene el script: as.numeric("abc") devuelve NA e imprime una advertencia de coerción, por lo que los NA silenciosos después de una importación son casi siempre un problema de tipo. La misma lógica impulsa factores importantes, que almacenan categorías como códigos enteros más una tabla de niveles.

Una vez definidos los tipos, el siguiente paso es determinar los operadores que los utilizarán.

R aritmética Operatoros

Primero veremos los operadores aritméticos básicos en R. A continuación se muestran los operadores aritméticos en la programación en R y su significado:

Operator Mareas Ideales para Lecciones
+ Adición
– Subtracdisrupción
* Multiplicación
/ División
^ o ** Exponenciación
%% Módulo (resto después de la división)
%/% División entera (cociente, resto descartado)

Cada uno de estos operadores está vectorizado, por lo que la misma expresión funciona tanto con un solo valor como con una columna completa.

Ejemplo 1: Suma

# An addition
3 + 4

Salida:

## [1] 7

Puedes copiar y pegar fácilmente el código R anterior en el RStudio Consola. En este artículo, la salida se muestra en las líneas que comienzan con ##. Por ejemplo, si escribimos el código print("Guru99") la consola imprime [1] "Guru99", que esta página mostraría como ## [1] "Guru99 ".

El símbolo ## marca una línea de salida impresa, y el número entre corchetes ([1]) es el índice del primer valor de esa línea, no forma parte del resultado.

Las oraciones que comienzan con # son comentarios. Podemos usar # dentro de un script de R para agregar cualquier nota que queramos, y R la ignorará durante la ejecución.

Ejemplo 2: Multiplicación

# A multiplication
3*5

Salida:

## [1] 15

Ejemplo 3: División

# A division
(5+5)/2

Salida:

## [1] 5

Ejemplo 4: Exponenciación

# Exponentiation
2^5

Salida:

## [1] 32

Ejemplo 5: Módulo

# Modulo
28%%6

Salida:

## [1] 4

La aritmética produce números. El siguiente grupo de operadores produce VERDADERO y FALSO.

R Relacional (Comparación) Operatoros

Los operadores relacionales comparan dos valores y devuelven un resultado lógico. Son los operadores que establecen las condiciones utilizadas para el filtrado y se vectorizan exactamente igual que los operadores aritméticos.

Operator Mareas Ideales para Lecciones
> Más que
< Less than
>= Mayor qué o igual a
<= Less que o igual a
== Exactamente igual a
!= No igual a
a <- 10
b <- 3

a > b     # TRUE
a < b     # FALSE
a >= 10   # TRUE
a <= 3    # FALSE
a == b    # FALSE
a != b    # TRUE

# Relational operators are vectorised
scores <- c(45, 78, 90, 62)
scores >= 60   # FALSE TRUE TRUE TRUE

Dos hábitos ahorran tiempo aquí. Use == para comparación y <- para asignación, porque un solo = dentro de una condición es un error común de principiante. Y evite == en números de punto flotante: el redondeo de punto flotante significa que 0.1 + 0.2 == 0.3 es FALSO, por lo que isTRUE(all.equal(0.1 + 0.2, 0.3)) es la prueba segura. Comparaciones en marcos de datos ordenados Sigue las mismas reglas.

R lógico Operatoros

Con los operadores lógicos, queremos devolver valores dentro del vector en función de condiciones lógicas. La siguiente tabla enumera los operadores lógicos disponibles en R.

Tabla de referencia de operadores lógicos y relacionales en R con sus significados.

En R, las expresiones lógicas se encierran entre corchetes []. Podemos añadir tantas expresiones condicionales como queramos, pero debemos incluirlas entre paréntesis. Podemos seguir esta estructura para crear una expresión condicional:

variable_name[(conditional_statement)]

Utilizando `variable_name` como referencia a la variable que queremos usar en la instrucción, creamos la instrucción lógica, por ejemplo, `variable_name > 0`. Finalmente, usamos corchetes para finalizar la instrucción lógica. A continuación, se muestra un ejemplo de instrucción lógica.

Ejemplo 1: Comparar todos los elementos de un vector.

# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5

Salida:

## [1]FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

En la salida anterior, R lee cada valor y lo compara con la condición logical_vector>5. Si el valor es estrictamente mayor que cinco, la condición es VERDADERA; de lo contrario, es FALSA. R devuelve un vector de VERDADERO y FALSO.

Ejemplo 2: Conservar solo los elementos que coinciden

En el ejemplo siguiente, queremos extract los valores que solo cumplen la condición 'es estrictamente mayor que cinco'. Para ello, podemos encerrar la condición entre corchetes precedida por el vector que contiene los valores.

# Print value strictly above 5
logical_vector[(logical_vector>5)]

Salida:

## [1]  6  7  8  9 10

Ejemplo 3: Combinar dos condiciones

# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]

Salida:

## [1] 5 6

El ejemplo 3 utiliza el ampersand simple & a propósito. Los operadores de un solo carácter & y | comparan vectores elemento por elemento y devuelven un vector, que es lo que necesita el subconjunto. Las formas dobles && y || devuelven un valor y pertenecen a las condiciones if() y while(). Dado que R 4.3.0Pasar un argumento de más de un elemento a && o || es un error en lugar de una advertencia, por lo que las dos familias ya no son intercambiables. El operador ! niega una condición, y xor() da OR exclusivo.

Tarea de R Operatoros

Los operadores de asignación vinculan un valor a un nombre. R ofrece más de ellos que la mayoría de los lenguajes, y las diferencias importan una vez que el código pasa a funciones.

Operator Mareas Ideales para Lecciones
<- Asignación izquierda, la opción idiomática en R
= Asignación izquierda, pero normalmente reservada para argumentos de función.
-> Asignación correcta, válida pero rara vez utilizada
<< - Superasignación que busca entornos envolventes
- >> Superasignación correcta
# Left assignment -- the idiomatic form
count <- 5

# Equals sign: works, but reserve it for function arguments
count = 5
round(3.14159, digits = 2)

# Right assignment
5 -> count

# Superassignment, used inside functions to reach an outer scope
count <<- 5

Las guías de estilo recomiendan <- para crear objetos y = para nombrar argumentos dentro de una llamada, porque así los dos roles se mantienen visualmente distintos. Use <<- con moderación: cambia un objeto fuera de la función actual y hace que el código sea más difícil de entender. Una vez que la asignación y los tipos sean familiares, los siguientes pasos son: Importación de datos reales y reshaping con dplyr; El Descripción general del lenguaje R Pone en contexto toda la cadena de herramientas.

Preguntas Frecuentes

Un vector contiene elementos de un solo tipo, y mezclar tipos obliga a realizar una conversión forzada. Una lista contiene cualquier cosa en cada espacio, incluidas otras listas, marcos de datos o funciones, razón por la cual los objetos del modelo son listas.

Cuando dos vectores de longitudes diferentes se encuentran con un operador, R repite el más corto hasta que las longitudes coincidan. c(1,2,3,4) + c(1,2) da como resultado 2 4 4 6. Aparece una advertencia solo cuando la longitud mayor no es un múltiplo.

NA indica un valor faltante en un vector. NULL indica la ausencia de un objeto y tiene longitud cero. NaN es un resultado numérico indefinido, como 0/0. Inf es la división por cero, como en 1/0.

El operador %in% comprueba la pertenencia y devuelve VERDADERO para cada elemento de la izquierda encontrado en el vector de la derecha. c(2,7) %in% c(1,2,3) devuelve VERDADERO FALSO. Reemplaza largas cadenas de comparaciones == unidas con |.

Elija un matriz para cuadrículas numéricas y álgebra lineal, un marco de datos para tablas cuyas columnas difieren en tipo, y una lista cuando los elementos tienen formas diferentes.

Introducido en R 4.1.0, |> pasa el valor de su izquierda al primer argumento de la función de su derecha. Encadena pasos sin anidar llamadas y no necesita ningún paquete, a diferencia de la tubería %>% de magrittr.

Los asistentes de IA señalan desajustes de tipo, sugieren conversiones as.* y elaboran código de recodificación a partir de una muestra de filas. También proponen pasos de ingeniería de características antes de una aprendizaje automático El modelo está ajustado. Siempre verifique el código generado comparándolo con sus datos.

Sí. RStudio 2023.09.0 y versiones posteriores incluyen una Copiloto de GitHub Integración que completa expresiones R directamente en línea. Se requiere una suscripción a Copilot, y los administradores deben habilitarla en RStudio Server o Posit Workbench.

Resumir este post con: