Как справиться с ошибкой R: оператор $ недействителен для атомарных векторов


Одна распространенная ошибка, с которой вы можете столкнуться в R:

$ operator is invalid for atomic vectors

Эта ошибка возникает, когда вы пытаетесь получить доступ к элементу атомарного вектора с помощью оператора $ .

«Атомарный вектор» — это любой одномерный объект данных, созданный с помощью функций c() или vector() в R.

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

В этом руководстве представлены примеры того, как справиться с этой ошибкой на практике.

Как воспроизвести сообщение об ошибке

Предположим, мы пытаемся использовать оператор $ для доступа к элементу в следующем векторе в R:

#define vector
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: доступ к элементам с помощью двойных скобок

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

#define vector
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() :

#define vector
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 Преобразование вектора во фрейм данных и использование оператора $

Еще один способ получить доступ к элементам по имени в векторе — сначала преобразовать вектор во фрейм данных, а затем использовать оператор $ для доступа к значению:

#define vector
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: NA, представленные Coercion
Как исправить в R: нижний индекс выходит за пределы
Как исправить в R: контрасты могут применяться только к факторам с 2 или более уровнями

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.