En este artículo, vamos a ver cómo corregir que el operador $no sea válido para los vectores atómicos en el lenguaje de programación R.
El error que uno puede enfrentar en R es:
$ operator is invalid for atomic vectors
Tal error es producido por el compilador R cuando tratamos de obtener un elemento de un vector atómico usando el operador $. Un vector atómico es simplemente un objeto unidimensional que contiene datos creados con la ayuda de las funciones c() y vector(). R no nos permite acceder a elementos de un vector atómico usando el símbolo $. Pero podemos usar corchetes dobles, es decir, [[]] o la función getElement() para acceder a ellos.
Cuándo puede ocurrir este error
Consideremos un ejemplo en el que tenemos un vector vectorial numérico , inicializado con los primeros cinco números naturales. A cada uno de los números se le asigna un nombre usando la función nombres() en R. La sintaxis de la función nombres() se proporciona a continuación:
Sintaxis: nombres(vect) <- valor
Parámetros:
- vect: un objeto, es decir, vector, array, marco de datos, etc.
- valor: Los nombres correspondientes a ser asignados
R
# Define a vector vect <- c(1, 2, 3, 4, 5) # Set integers names names(vect) <- c('first', 'second', 'third', 'fourth', 'fifth') # Display the vector vect
Producción:
Ahora intentemos acceder al tercer elemento del elemento usando la declaración, vect$tercero:
R
# Define a vector vect <- c(1, 2, 3, 4, 5) # Set integers names names(vect) <- c('first', 'second', 'third', 'fourth', 'fifth') # Display the vector vect$third
Producción:
El compilador R produce un error porque no se nos permite acceder a elementos en un vector atómico de esta manera. Para verificar si el vector es realmente un vector atómico, podemos usar la función is.atomic() en R. La sintaxis de esta función se muestra a continuación:
Sintaxis: is.atomic(vect)
Parámetros:
vect: aquí, vect representa un vector
Tipo de devolución:
- VERDADERO: si vect es un vector atómico
- FALSO: Si vect no es un vector atómico
Cómo corregir el error
Hay tres formas en las que podemos corregir este error:
Método 1: Acceder a elementos usando corchetes dobles
Podemos acceder fácilmente a elementos de un vector atómico con la ayuda de corchetes dobles que, [[]]:
R
# Define a vector vect <- c(1, 2, 3, 4, 5) # Set integers names names(vect) <- c('first', 'second', 'third', 'fourth', 'fifth') # Display the third element of the # vector vect[['third']]
Producción:
Método 2: Acceder a elementos usando la función getElement()
Otra forma es usar la función getElement() para acceder a elementos del vector atómico. La función tiene la siguiente sintaxis:
Sintaxis: getElement(vect, especificador)
Parámetros:
- vect: Representa un vector
- especificador: Representa el nombre del elemento al que queremos acceder
Tipo de devolución:
- Devuelve un elemento marcado con el especificador.
R
# Define a vector vect <- c(1, 2, 3, 4, 5) # Set integers names names(vect) <- c('first', 'second', 'third', 'fourth', 'fifth') # Display the third element of # the vector getElement(vect, 'third')
Producción:
Método 3: acceder a los elementos convirtiendo el vector en un marco de datos y luego usando el operador $
La otra forma es convertir primero el vector en un marco de datos y luego aplicar el operador $. Podemos convertir un vector en un marco de datos usando la función as.data.frame(). La sintaxis de esta función se da a continuación:
Sintaxis: as.data.frame(objeto)
Parámetro:
- objeto representa un vector o array
Tipo de devolución:
- Devuelve un vector
R
# Define a vector vect <- c(1, 2, 3, 4, 5) # Set integers names names(vect) <- c('first', 'second', 'third', 'fourth', 'fifth') # Transform the vector to data frame dataframe <- as.data.frame(t(vect)) # Access the third element dataframe$third
Producción: