Um erro comum que pode encontrar no R é:

 O operador $ não é válido para vectores atómicos 

Este erro ocorre quando se tenta aceder a um elemento de um vetor atómico utilizando a função $ operador.

Um "vetor atómico" é qualquer objeto de dados unidimensional criado utilizando a função c() ou vetorial() funções em R.

Infelizmente, o $ não pode ser utilizado para aceder a elementos em vectores atómicos. Em vez disso, é necessário utilizar parênteses duplos [[]] ou o getElement() função.

Este tutorial partilha exemplos de como lidar com este erro na prática.

Como reproduzir a mensagem de erro

Suponhamos que estamos a tentar utilizar o $ para aceder a um elemento do seguinte vetor em R:

 #definir vetor x <- c(1, 3, 7, 6, 2) #fornecer nomes names(x) <- c('a', 'b', 'c', 'd', 'e') #exibir vetor x a b c d e 1 3 7 6 2 #tentar aceder ao valor em 'e' x$e Erro em x$e : o operador $ é inválido para vectores atómicos 

Recebemos um erro porque não é válido utilizar o $ para aceder a elementos em vectores atómicos. Podemos também verificar que o nosso vetor é de facto atómico:

 #verificar se o vetor é atómico é. atómico (x) VERDADEIRO 

Método #1: Aceder a elementos utilizando parênteses duplos

Uma forma de aceder a elementos por nome num vetor é utilizar a função [[]] notação:

 #definir vetor x <- c(1, 3, 7, 6, 2) #fornecer nomes names(x) <- c('a', 'b', 'c', 'd', 'e') #aceder valor para 'e' x[['e']] 2 

Método #2: Aceder a elementos utilizando getElement()

Outra forma de aceder a elementos por nome num vetor é utilizar a função getElement() notação:

 #define vetor x <- c(1, 3, 7, 6, 2) #provide names names(x) <- c('a', 'b', 'c', 'd', 'e') #access value for 'e' getElement(x, 'e') 2 

Método #3 Converter Vetor em Quadro de Dados & Utilizar o operador $

Outra forma de aceder a elementos por nome num vetor é primeiro converter o vetor num quadro de dados e depois utilizar a função $ para aceder ao valor:

 #define vetor x <- c(1, 3, 7, 6, 2) #provide names names(x) <- c('a', 'b', 'c', 'd', 'e') #convert vetor 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 2