Como enviado a um método em R

Uma ferramenta útil quando se lida com funções de I está despachando para um método. Uma coisa a lembrar sobre as funções em R é que uma função pode dar um resultado diferente com base no tipo de valor que você dá os argumentos R tem um sistema de gênio, chamado de sistema de função genérica,

que permite que você ligue para diferentes funções com o mesmo nome.

Pense sobre os quadros de dados e listas. Se você imprimir uma lista no console, você começa a saída dispostas em fileiras. Por outro lado, um quadro de dados é impressa ao consola dispostos em colunas. Então o impressão() função trata listas e quadros de dados de forma diferente, mas ambas as vezes você usou a mesma função.

Encontre os métodos por trás da função

É fácil descobrir se você usou a mesma função nas duas vezes - basta espiar dentro do código de função de impressão() digitando seu nome na linha de comando, como este:

> Printfunction (x, ...) UseMethod ( "print")

Você pode ignorar as duas últimas linhas, porque eles são usados ​​apenas por desenvolvedores R. Mas dê uma olhada no corpo da função - é apenas uma linha!

Funções que não fazem muito mais do que passar em objetos para a função certa são chamados funções genéricas. Neste exemplo, impressão() é uma função genérica. As funções que fazem o trabalho real são chamados métodos.

Usar métodos com UseMethod

Como na terra pode que uma linha de código no impressão() função de fazer tantas coisas complexas como vetores de impressão, quadros de dados e listas de todos de uma forma diferente?

A resposta está contida no UseMethod () função, que é a função central na função genérica do sistema de R. UseMethod () diz R para seguir em frente e procurar uma função que pode lidar com o tipo de objeto que é dado como argumento x.

R faz isso olhando através do conjunto completo de funções em busca de outra função que começa com impressão seguido por um ponto e, em seguida, o nome do tipo de objecto.

Você pode fazer isso sozinho usando o comando apropos ( 'print . "). Entre as aspas, você pode colocar uma expressão regular bem como na grep () função. A fim de dizer-R que o ponto realmente significa um ponto, você tem que precedê-lo com duas barras invertidas. Não se surpreenda quando você ter mais de 40 diferentes impressão() funções para todos os tipos de objetos.

Suponha que você tenha um quadro de dados que deseja imprimir. R vai olhar para cima a função print.data.frame () e usar essa função para imprimir o objeto que você passou como um argumento. Você também pode chamar essa função a si mesmo como este:

> small.one lt; - data.frame (a = 1: 2, b = 2: 1)> print.data.frame (small.one) um B1 1 22 2 1

O efeito dessa função não difere em nada do que você poderia obter se usasse o genérico print (small.one) funcionar em seu lugar. Isso é porque impressão() vai dar a small.one ao print.data.frame () funcionam para cuidar dela.

métodos de uso padrão

No caso de uma lista, você pode ser tentado a procurar um print.list () função. Mas isso não vai funcionar, porque o print.list () função não existe. Ainda que não seja um problema para R - R irá ignorar o tipo do objeto, nesse caso, e basta olhar para um método padrão, print.default ().

Para muitas funções genéricas, existe um método padrão que é usado se nenhum método específico pode ser encontrado. Se houver, você pode reconhecer o método padrão pela palavra padrão após o ponto no nome da função.

Então, se você quiser imprimir o quadro de dados como uma lista, use o método padrão como este:

> Print.default (small.one) $ a [1] 1 2 $ b [1] 2 1attr ( "class") [1] "data.frame"

menu