Як виправити в R: оператор $ недійсний для атомарних векторів

Як виправити в R: оператор $ недійсний для атомарних векторів

У цій статті ми побачимо, як виправити недійсний оператор $ для атомарних векторів у R програмування мова .

Помилка, з якою можна зіткнутися в R:

$ operator is invalid for atomic vectors 

Така помилка створюється компілятором R, коли ми намагаємося отримати елемент атомарного вектора за допомогою оператора $. Атомний вектор — це просто одновимірний об’єкт, що містить дані, створені за допомогою функцій c() і vector(). R не дозволяє отримати доступ до елементів атомарного вектора за допомогою символу $. Але ми можемо використовувати подвійні дужки, наприклад, [[]] або функцію getElement() для доступу до них.

Коли може виникнути ця помилка

Давайте розглянемо приклад, у якому ми маємо числовий вектор нести ініціалізується першими п'ятьма натуральними числами. Кожному з чисел присвоюється ім’я за допомогою функції names() у R. Синтаксис функції names() наведено нижче:

Синтаксис: імена(vect) <- значення

Параметри:

  • vect: об’єкт, тобто вектор, матриця, кадр даних тощо.
  • значення: відповідні імена, які потрібно призначити

Р




# 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>

Вихід:

Тепер давайте спробуємо отримати доступ до третього елемента за допомогою оператора, vect$третій:

Р




# 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>

Вихід:

Компілятор R створює помилку, тому що нам не дозволено отримати доступ до елементів у атомарному векторі таким чином. Щоб перевірити, чи дійсно вектор є атомарним вектором, ми можемо використати функцію is.atomic() у R. Синтаксис цієї функції наведено нижче:

Синтаксис: is.atomic(vect)

Параметри:

vect: тут vect представляє вектор

Тип повернення:

  • ІСТИНА: якщо vect є атомарним вектором
  • FALSE: якщо vect не є атомарним вектором

Як виправити помилку

Є три способи використання яких ми можемо виправити цю помилку:

Спосіб 1: доступ до елементів за допомогою подвійних дужок

Ми можемо легко отримати доступ до елементів атомарного вектора за допомогою подвійних дужок [[]]:

Р




# 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'> ]]>

Вихід:

метод 2: Доступ до елементів за допомогою функції getElement().

Іншим способом є використання функції getElement() для доступу до елементів атомарного вектора. Функція має такий синтаксис:

Синтаксис: getElement(vect, специфікатор)

Параметри:

  • vect: представляє вектор
  • специфікатор: представляє назву елемента, до якого ми хочемо отримати доступ

Тип повернення:

  • Повертає елемент, позначений специфікатором

Р




# 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'> )>

Вихід:

Спосіб 3: доступ до елементів шляхом перетворення вектора на кадр даних і використання оператора $

Інший спосіб — спочатку перетворити вектор на кадр даних, а потім застосувати оператор $. Ми можемо перетворити вектор на кадр даних за допомогою функції as.data.frame(). Синтаксис цієї функції наведено нижче:

Синтаксис: as.data.frame(об'єкт)

Параметр:

  • об'єкт представляє вектор або матрицю

Тип повернення:

  • Повертає вектор

Р




# 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>

Вихід: