logo

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

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

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



$ operator is invalid for atomic vectors>

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

перенесення слів css

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

Давайте розглянемо приклад, у якому ми маємо числовий вектор нести ініціалізується першими п'ятьма натуральними числами. Кожному з чисел присвоюється ім’я за допомогою функції 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'>)>

>

>

список c#

Вихід:

Спосіб 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>

>

>

Вихід: