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?

JD Long
fonte

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.

ars
fonte
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.

Hadley
fonte
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.

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

Também pode ser útil

Josh Reich
fonte