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


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

 $ operator is invalid for atomic vectors

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

«Атомный вектор» — это любой одномерный объект данных, созданный с помощью функций c() или вектора() в 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: NA, введенные принудительно
Как починить в R: подсказка за пределами
Как исправить в R: контрасты можно применять только к факторам с 2 и более уровнями

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *