Як обробляти помилку 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 або більше рівнями