Modo, classe e tipo de objetos R


39

Eu queria saber quais são as diferenças entre modo, classe e tipo de objetos R? O tipo de um objeto R pode ser obtido pela função typeof (), mode by mode () e classe por class ().

Também outras funções e conceitos similares que eu perdi?

Obrigado e cumprimentos!


2
str (variável) é seu melhor amigo.
Brandon Bertelsen

2
Veja também a pergunta R: Tipos e classes de variáveis no Stack Overflow.
Leo

Respostas:


21

O class()é usado para definir / identificar o "tipo" de um objeto do ponto de vista da programação orientada a objetos em R.

> x <- 1:3
> class(x)
[1] "integer"

qualquer função genérica que tenha um método "número inteiro" será usada.

typeof()fornece o "tipo" de objeto do ponto de vista de R, enquanto mode()fornece o "tipo" de objeto do ponto de vista de Becker, Chambers & Wilks (1988). Este último pode ser mais compatível com outras implementações S, de acordo com o manual R Language Definition .

Eu provavelmente erraria no uso typeof()na maioria dos casos, a menos que fosse para passar objetos R para código compilado, onde storage.mode()será útil.

Isso é discutido de maneira útil na definição da linguagem R, conforme vinculado acima.


3
Por que existem tantos pontos de vista? Não vejo benefícios, mas confusão.
10133 smwikipedia

1
@smwikipedia porque R tem uma herança que inclui S-Plus e S e esse último idioma evoluiu ao longo do tempo. Além disso, é necessário diferenciar entre os objetos que os usuários podem criar e os tipos de objetos base.
Reintegrar Monica - G. Simpson

@smwikipedia porque é assim que R é. Pela mesma razão que temos <-e =para atribuição de variáveis.
Andre Terra

9

De: https://www.mail-archive.com/r-help@r-project.org/msg17169.html :

'mode' é uma classificação mutuamente exclusiva de objetos de acordo com sua estrutura básica. Os modos 'atômicos' são numéricos, complexos, de caráter e lógicos. Objetos recursivos têm modos como 'lista' ou 'função' ou alguns outros. Um objeto tem um e apenas um modo.

'class' é uma propriedade atribuída a um objeto que determina como funções genéricas operam com ele. Não é uma classificação mutuamente exclusiva. Se um objeto não possui uma classe específica atribuída a ele, como um vetor numérico simples, sua classe geralmente é igual ao seu modo, por convenção.

Alterar o modo de um objeto é freqüentemente chamado de 'coerção'. O modo de um objeto pode mudar sem necessariamente alterar a classe.


1

A principal diferença entre classe e typeof é que a primeira pode ser definida pelo usuário, mas o tipo não. Por exemplo, defina uma lista

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

Dar um determinado nome de classe a um objeto definido pelo usuário é muito útil para escrever programas. Ele permite marcar objetos definidos pelo usuário de maneira semelhante ao que acontece nas linguagens de programação orientadas a objetos.


De acordo com a Rdocumentação de typeofe class, a afirmação sobre "diferença principal" está incorreta. classé um atributo de um objeto que pode ser atribuído independentemente do seu modo de armazenamento interno, enquanto "typeof determina o tipo (R interno) ou o modo de armazenamento de qualquer objeto". Um descreve uma característica lógica , enquanto o outro é uma característica física de um objeto.
whuber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.