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


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

 $ operator is invalid for atomic vectors

Ця помилка виникає, коли ви намагаєтеся отримати доступ до елемента атомарного вектора за допомогою оператора $ .

«Атомарний вектор» — це будь-який одновимірний об’єкт даних, створений за допомогою функцій c() або vector() у R.

На жаль, $ не можна використовувати для доступу до елементів атомарних векторів. Замість цього слід використовувати подвійні дужки [[]] або функцію getElement() .

У цьому посібнику наведено приклади того, як усунути цю помилку на практиці.

Як відтворити повідомлення про помилку

Припустімо, ми намагаємося використати оператор $ для доступу до елемента наступного вектора в R:

 #definevector
x <- c(1, 3, 7, 6, 2)

#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')

#display vector
x

a B C D E
1 3 7 6 2

#attempt to access value in 'e'
x$e

Error in x$e: $ operator is invalid for atomic vectors

Ми отримуємо повідомлення про помилку, оскільки використання оператора $ для доступу до елементів атомарних векторів неприпустимо. Ми також можемо перевірити, що наш вектор справді атомарний:

 #check if vector is atomic
is. atomic (x)

[1] TRUE

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

Один із способів отримати доступ до елементів за іменем у векторі — використовувати нотацію [[]] :

 #definevector
x <- c(1, 3, 7, 6, 2)

#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')

#access value for 'e'
x[['e']]

[1] 2

Спосіб №2: Доступ до елементів за допомогою getElement()

Інший спосіб отримати доступ до елементів за іменем у векторі — це використовувати нотацію getElement() :

 #definevector
x <- c(1, 3, 7, 6, 2)

#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')

#access value for 'e'
getElement(x, 'e')

[1] 2

Спосіб №3: Перетворення вектора на кадр даних і використання оператора $

Інший спосіб отримати доступ до елементів за назвою у векторі — спочатку перетворити вектор на кадр даних, а потім використати оператор $ для доступу до значення:

 #definevector
x <- c(1, 3, 7, 6, 2)

#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')

#convert vector to data frame
data_x <- as. data . frame (t(x))

#display data frame
data_x

  a B C D E
1 1 3 7 6 2

#access value for 'e'
data_x$e

[1] 2

Додаткові ресурси

У наступних посібниках пояснюється, як вирішити інші поширені помилки в R:

Як виправити в R: імена не збігаються з попередніми іменами
Як виправити в R: NAs, введені примусово
Як ремонтувати в R: підказка поза межами
Як виправити в R: контрасти можна застосовувати лише до факторів із 2 або більше рівнями

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *