Одна распространенная ошибка, с которой вы можете столкнуться в 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 или более уровнями