Cómo corregir en R: el operador $no es válido para vectores atómicos

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:

 

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *