Qual é o significado do "." (Ponto) em R?


39

Estou apenas lendo o livro "R em poucas palavras". E parece que eu pulei a parte em que o "." como em "sample.formula" foi explicado.

> sample.formula <- as.formula(y~x1+x2)

A amostra é um objeto com uma fórmula de campo como em outros idiomas? Se sim, como posso descobrir quais outros campos / funções esse objeto possui? (Declaração de tipo)

EDIT: Acabei de encontrar outro uso confuso do ".":

> svm(formula = is_spam~., data = spambase.training)

(o ponto entre ~.,)


O ponto que você vê com o is_spam ~. comando significa que não há variáveis ​​explicativas. Normalmente, com fórmulas de modelo, você verá y ~ x, mas se você não tiver uma variável x, y ~. diz para adivinhar o valor de y sem usar outras variáveis. É o mesmo que o modeloy=β0 0
Christopher Aden

12
@Christopher Pelo contrário, .na fórmula diz R para usar todas as variáveis ​​no quadro de dados spambase.training(exceto is_spam) como preditores. O modelo é adequado . y=β0 0y ~ 1
caracal

Não verifiquei as fontes de antemão. Obrigado pela correção!
Christopher Aden

@caracal (+1) Uau, eu estava pensando em como fazer isso. Obrigado!
Thomas Levine

Respostas:


30

O ponto pode ser usado como no nome normal. No entanto, tem uma interpretação especial adicional. Suponha que tenhamos um objeto com classe específica:

 a <- list(b=1)
 class(a) <- "myclass"

Agora declare myfunctioncomo genérico padrão da seguinte maneira:

 myfunction <- function(x,...) UseMethod("myfunction")

Agora declare a função

 myfunction.myclass <- function(x,...) x$b+1

Então o ponto tem um significado especial. Para todos os objetos com myclasschamada de classe

 myfunction(a)

realmente chamará a função myfunction.myclass:

 > myfunction(a)
  [1] 2

Isso é amplamente utilizado em R, o exemplo mais apropriado é a função summary. Cada classe tem sua própria summaryfunção; portanto, quando você ajusta algum modelo, por exemplo (que geralmente retorna um objeto com uma classe específica), é necessário chamar summarye ele chamará a função de resumo apropriada para esse modelo específico.


Estou muito surpreso que esta resposta tenha sido aceita e votada tanto, porque não responde à pergunta! Refere-se às reticências ... (que é um único léxico, não uma sequência de três diferentes) como um "ponto", enquanto a pergunta claramente significa um ponto . usado em fórmulas e nomes de uma maneira totalmente diferente, conforme corretamente descrito em um artigo contemporâneo. resposta por Chase.
whuber

3
Bem, eu não me refiro às reticências. Tentei explicar que o ponto é usado para o envio do método S3. As funções genéricas geralmente possuem elipses, por isso as usei. Se eles forem removidos do código, a resposta não será alterada. Só posso supor que dei a resposta antes da edição, pois daria uma resposta diferente agora depois de reler o corpo da pergunta.
Mvctas

1
Obrigado pela explicação. Eu acho que a aparência de "..." duas vezes me levou a acreditar que você estava se referindo a ela como um "ponto".
whuber

12

Veja a página de ajuda ?formulareferente a .Aqui estão os bits relevantes:

Existem duas interpretações especiais de. em uma fórmula. O habitual está no contexto de um argumento de dados de funções de ajuste de modelo e significa 'todas as colunas que não estão na fórmula': ver terms.formula. Somente no contexto de update.formula, significa 'o que estava anteriormente nesta parte da fórmula'.

Alternativamente, os reshapee reshape2pacotes de usar .e ...um pouco diferente (de ?cast):

Existem algumas variáveis ​​especiais: "..." representa todas as outras variáveis ​​não usadas na fórmula e "." representa nenhuma variável


5

Existem algumas exceções (envio do método S3), mas geralmente é simplesmente usado como auxílio à legibilidade e, como tal, não tem significado especial.


2
Eu diria o contrário - ele tem um significado especial (o envio S3 que você mencionou), mas algumas convenções de nomenclatura antigas fizeram com que nomes de funções que não são genéricos do S3 tivessem nomes que incluíssem a .. Isso pertence aos nomes das funções. Quanto aos nomes de objetos (não funcionais), então sim, não há significado especial.
Reponha Monica - G. Simpson

No início de um nome, a .torna o objeto invisível ls().
caracal 12/05

2

O ponto no sample.formula não separa a amostra da fórmula , exceto visualmente. É apenas um nome de variável. Os nomes de variáveis ​​R podem consistir em alfanuméricos e ponto (.) E sublinhado (_) com uma exceção. Aqui está a regra real:

" Um nome sintaticamente válido consiste em letras, números e os caracteres de ponto ou sublinhado e começa com uma letra ou o ponto não seguido por um número. Nomes como" .2way "não são válidos e nem as palavras reservadas. "

O segundo caso (ou seja, o caso de is_spam ~. ) É diferente e é explicado acima.

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.