Identificação de objeto R


119

Costumo terminar com uma função que produz saída, para a qual não entendo o tipo de dado de saída. Estou esperando uma lista e acaba sendo uma lista de listas ou um quadro de dados ou outra coisa. Qual é um bom método ou fluxo de trabalho para descobrir o tipo de dados de saída ao usar uma função pela primeira vez?

Respostas:


126

Normalmente começo com uma combinação de:

typeof(obj)
class(obj)
sapply(obj, class)
sapply(obj, attributes)
attributes(obj)
names(obj)

conforme apropriado, com base no que é revelado. Por exemplo, tente com:

obj <- data.frame(a=1:26, b=letters)
obj <- list(a=1:26, b=letters, c=list(d=1:26, e=letters))
data(cars)
obj <- lm(dist ~ speed, data=cars)

..etc.

Se objé um objeto S3 ou S4, você também pode tentar methodsou showMethods, showClassetc. Patrick Burns R Inferno tem uma seção muito boa sobre isso (seção 7).

EDIT : Dirk e Hadley mencionam str(obj)em suas respostas. É realmente muito melhor do que qualquer um dos itens acima para dar uma olhada rápida e até detalhada em um objeto.


1
acho que não cheguei tão longe no R Inferno. Obrigado por me enviar de volta para lá.
JD Longo

3
Caso você ainda não o tenha visto, "Objetos S4 em 15 páginas ou menos" [ stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] é outra boa leitura (com mais detalhes).
ars

Eu não tinha visto isso. Obrigado pelo link. Valeu a pena o preço do ingresso. :)
JD Longo

Eu criei uma pequena função utilitária que codifica essa sugestão. Veja tellMeAboutThis.r
eludom

64
str(x)

É tudo o que você precisa lembrar para 99% dos casos.


2
str(x, max.level=1)pode ser útil se x for um ggplot de várias camadas!
precisa saber é o seguinte

7
str (UCTURE) difícil de lembrar, porque eu continuo pensando em "string", mas oh, tão útil. Só tenho que dizer ESTRUTURA dez vezes.
Dmitri

13

Se eu receber 'someObject', diga via

someObject <- myMagicFunction(...)

então eu costumo prosseguir

class(someObject)
str(someObject)

que pode ser seguido por head (), resumo (), print (), ... dependendo da classe que você possui.


Apenas tentei str (obj). Muito mais do que eu esperava de uma representação de string; muito arrumado! Obrigado.
ars

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.