Jakie jest znaczenie „.” (Kropka) w R?

39

Właśnie czytam książkę „R in a Nutshell”. I wygląda na to, że pominąłem część, w której „.” jak w „sample.formula” zostało wyjaśnione.

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

Czy próbka jest przedmiotem z formułą pola jak w innych językach? A jeśli tak, to jak mogę dowiedzieć się, jakie inne pola / funkcje ma ten obiekt? (Deklaracja typu)

EDYCJA: Właśnie znalazłem inne mylące użycie „.”:

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

(kropka między ~.,)

fabiański
źródło
Kropka widoczna w is_spam ~. polecenie oznacza, że ​​nie ma zmiennych objaśniających. Zazwyczaj w przypadku formuł modelowych zobaczysz y ~ x, ale jeśli nie masz zmiennej x, y ~. mówi, aby zgadywać na podstawie wartości y bez innych zmiennych. Jest to to samo, co modely=β0
Christopher Aden
12
@Christopher Przeciwnie, .we wzorze mówi R, aby użyć wszystkich zmiennych w ramce danych spambase.training(oprócz is_spam) jako predyktorów. Model jest odpowiedni . y=β0y ~ 1
caracal
Nie sprawdzałem wcześniej źródeł. Dziękuję za poprawę!
Christopher Aden
@caracal (+1) Wow, właśnie zastanawiałem się, jak to zrobić. Dzięki!
Thomas Levine

Odpowiedzi:

30

Kropka może być używana jak w zwykłym imieniu. Ma jednak dodatkową specjalną interpretację. Załóżmy, że mamy obiekt o określonej klasie:

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

Teraz zadeklaruj myfunctionjako standardowy ogólny w następujący sposób:

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

Teraz zadeklaruj funkcję

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

Zatem kropka ma specjalne znaczenie. Dla wszystkich obiektów z myclasswywołaniem klasy

 myfunction(a)

faktycznie wywoła funkcję myfunction.myclass:

 > myfunction(a)
  [1] 2

Jest to powszechnie stosowane w R, najbardziej odpowiednim przykładem jest funkcja summary. Każda klasa ma swoją summaryfunkcję, więc gdy na przykład dopasujesz jakiś model (który zwykle zwraca obiekt z określoną klasą), musisz wywołać summaryi wywoła odpowiednią funkcję podsumowania dla tego konkretnego modelu.

mpiktas
źródło
Jestem bardzo zaskoczony, że ta odpowiedź została tak bardzo zaakceptowana i pochwalona, ​​ponieważ w ogóle nie odpowiada na pytanie! Odnosi się do elipsy ... (która jest pojedynczym leksemem, a nie ciągiem trzech różnych) jako „kropki”, podczas gdy pytanie wyraźnie oznacza kropkę . stosowaną w formułach i nazwach w zupełnie inny sposób, jak to poprawnie opisano we współczesnym odpowiedź Chase.
whuber
3
Cóż, nie odnoszę się do elipsy. Próbowałem wyjaśnić, że kropka służy do wysyłania metody S3. Funkcje ogólne zwykle mają elipsy, dlatego ich użyłem. Jeśli zostaną usunięte z kodu, odpowiedź się nie zmieni. Mogę tylko zgadywać, że udzieliłem odpowiedzi przed edycją, ponieważ dałbym inną odpowiedź teraz po ponownym przeczytaniu treści pytania.
mpiktas
1
Dziękuję za wyjaśnienie. Wydaje mi się, że pojawienie się „…” dwa razy wprowadziło mnie w błąd, że uwierzyłem, że mówisz o nim jako „kropce”.
whuber
12

Spójrz na stronie pomocy dla ?formulawobec .Oto odpowiednie bity:

Istnieją dwie specjalne interpretacje. w formule. Zwykle jest w kontekście argumentu danych funkcji dopasowywania modelu i oznacza „wszystkie kolumny poza formułą”: patrz warunki. Formuła. Tylko w kontekście update.formula oznacza „to, co poprzednio było w tej części formuły”.

Alternatywnie, pakiety reshapei reshape2używają .i ...nieco inaczej (od ?cast):

Istnieje kilka specjalnych zmiennych: „...” reprezentuje wszystkie inne zmienne nieużywane w formule i „.” nie reprezentuje żadnej zmiennej

Gonić
źródło
5

Istnieją pewne wyjątki (wysyłka metody S3), ale ogólnie jest on po prostu używany jako pomoc w czytelności i jako taki nie ma specjalnego znaczenia.

Nick Sabbe
źródło
2
Powiedziałbym wręcz przeciwnie - ma specjalne znaczenie (wspomniana dyspozycja S3), ale niektóre stare konwencje nazewnictwa powodowały, że nazwy funkcji, które nie są nazwami ogólnymi S3, miały nazwy zawierające a .. Dotyczy to nazw funkcji. Jeśli chodzi o nazwy obiektów (niefunkcjonalnych), to tak, nie ma specjalnego znaczenia.
Przywróć Monikę - G. Simpson
Na początku nazwy obiekt .czyni go niewidocznym ls().
caracal
2

Kropka w próbce. Formuła nie oddziela próbki od formuły inaczej niż wizualnie. To tylko nazwa zmiennej. Nazwy zmiennych R mogą składać się z alfanumerycznych i kropek (.) I podkreślników (_) z jednym wyjątkiem. Oto aktualna zasada:

Prawidłowo składniowa nazwa składa się z liter, cyfr i kropki lub znaków podkreślenia i zaczyna się na literę lub kropkę, po której nie występuje cyfra. Nazwy takie jak„ .2way ”nie są prawidłowe, podobnie jak słowa zastrzeżone.

Drugi przypadek (tj. Przypadek is_spam ~. ) Jest inny i wyjaśniono go powyżej.

M. Naci Akkök
źródło