logo

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

En este artículo, veremos cómo arreglar que el operador $ no sea válido para vectores atómicos en el programación R idioma .

El error que uno puede enfrentar en R es:



$ operator is invalid for atomic vectors>

El compilador de R produce este tipo de error cuando intentamos obtener un elemento de un vector atómico utilizando 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.

Cuando podría ocurrir este error

Consideremos un ejemplo en el que tenemos un vector numérico llevar inicializado con los primeros cinco números naturales. A cada uno de los números se le asigna un nombre utilizando 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, matriz, marco de datos, etc.
  • valor: Los nombres correspondientes que se asignarán

R






clase abstracta java
# 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 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 de R produce un error porque no se nos permite acceder a elementos en un vector atómico de esta manera. Para comprobar 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 proporciona a continuación:

Sintaxis: es.atómico(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 arreglar el error

Hay tres formas de utilizarlas. podemos arreglar este error:

Método 1: acceder a elementos mediante corchetes dobles

Podemos acceder fácilmente a los elementos de un vector atómico con la ayuda de corchetes dobles, [[]]:

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 utilizar 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 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 elementos convirtiendo el vector en un marco de datos y luego usando el operador $

La otra forma es convertir el vector en un marco de datos primero 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 proporciona a continuación:

Sintaxis: como.marco.de.datos(objeto)

Parámetro:

  • El objeto representa un vector o una matriz.

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: