R'deki “.” (Nokta) 'nın anlamı nedir?


39

Sadece "Özetle R" kitabını okuyorum. Ve sanki "" nin bulunduğu kısmı atlamış gibiyim. "sample.formula" da olduğu gibi açıklandı.

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

Örnek, diğer dillerde olduğu gibi alan formülüne sahip bir nesne midir? Ve eğer öyleyse, bu nesnenin başka hangi alan / işlevlere sahip olduğunu nasıl öğrenebilirim? (Tip bildirimi)

EDIT: Ben sadece "." Başka bir kafa karıştırıcı kullanımı buldum:

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

(~, arasındaki nokta)


İs_spam ~ ile gördüğünüz nokta. komut, açıklayıcı değişkenlerin olmadığı anlamına gelir. Tipik olarak model formülleriyle y ~ x göreceksiniz, ancak x değişkeniniz yoksa, y ~. başka değişken kullanmadan y değerinde tahmin yapmayı söylüyor. Bu modely=β0
Christopher Aden

12
@Christopher tersine, .formül dataframe tüm değişkenler kullanmak R bildirir spambase.training(hariç is_spamprediktörü olarak). Model ile uyum . y=β0y ~ 1
caracal

Kaynakları önceden kontrol etmedim. Düzeltme için teşekkürler!
Christopher Aden

@caracal (+1) Wow Sadece bunun nasıl yapıldığını merak ediyordum. Teşekkürler!
Thomas Levine

Yanıtlar:


30

Nokta normal adda olduğu gibi kullanılabilir. Ancak ek özel yorumu vardır. Belirli bir sınıfla bir nesnemiz olduğunu varsayalım:

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

Şimdi myfunctionaşağıdaki şekilde standart jenerik olarak bildirin:

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

Şimdi işlevi bildirin

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

O zaman noktanın özel bir anlamı vardır. Sınıf myclassçağrısı olan tüm nesneler için

 myfunction(a)

gerçekte işlevini çağıracak myfunction.myclass:

 > myfunction(a)
  [1] 2

Bu R'de yaygın olarak kullanılır, en uygun örnek fonksiyondur summary. Her sınıfın kendi summaryişlevi vardır; bu nedenle, örneğin (belirli bir sınıfla nesneyi döndüren) bazı modellere uyduğunuzda, onu çağırmanız gerekir summaryve bu belirli model için uygun özet işlevini çağırır.


Bu cevabın kabul edilip reddedilmesine çok şaşırdım, çünkü soruyu hiç cevaplamıyor! Bu ifade eder üç nokta ... soru açıkça anlamına gelirken bir "nokta" olarak (tek bir lexemenin değil, üç farklı olanları bir dizi olan) nokta . olarak doğru bir şekilde eş zamanlı olarak açıklanan tamamen farklı bir şekilde formüller ve isimler kullanıldığı şekilde, Chase tarafından cevap.
whuber

3
Ben üç noktadan bahsetmiyorum. Nokta S3 yöntemi gönderme için kullanıldığını açıklamaya çalıştım. Genel işlevler genellikle elipslere sahiptir, bu yüzden onları kullandım. Koddan çıkarılırlarsa, cevap değişmez. Düzenlemeden önce cevabı verdiğimi tahmin edebilirim, çünkü şimdi soru gövdesini yeniden okuduktan sonra farklı bir cevap verecektim.
mpiktas

1
Açıklama için teşekkür ederim. Sanırım iki kez "..." ortaya çıkması, beni "nokta" olarak adlandırdığına inanmana yol açtı.
whuber

12

İlgili bitler ?formulaile ilgili yardım sayfasına bakınız .:

Hakkında iki özel yorum var. bir formülde. Genel olan model uydurma işlevlerinin veri argümanı bağlamındadır ve 'formülde aksi olmayan tüm sütunlar' anlamına gelir: terms.formula bakın. Sadece update.formula bağlamında, 'formülün bu bölümünde daha önce ne olduğu' anlamına gelir.

Alternatif olarak, reshapeve reshape2paketleri kullanmak .ve ...biraz farklı (dan ?cast):

Birkaç özel değişken var: "...", formülde kullanılmayan tüm değişkenleri ve "." değişkeni temsil etmiyor


5

Bazı istisnalar vardır (S3 yöntemi gönderilir), ancak genellikle okunaklı yardım olarak kullanılır ve özel bir anlamı yoktur.


2
Bunun tam tersini söyleyebilirim - özel bir anlamı var (bahsettiğiniz S3 gönderimi), ancak bazı eski adlandırma kuralları, S3 jeneriği olmayan işlev adlarının a içeren adlara sahip olmasına neden oldu .. Bu fonksiyonların isimleri ile ilgilidir. İşlevsel olmayan nesnelerin isimlerine gelince, evet, özel bir anlamı yoktur.
Monica'yı eski durumuna getirme - G. Simpson

Bir adın başında, bir .nesneyi ls()olsa görünmez hale getirir .
caracal

2

Dot sample.formula ayrı değil örnek gelen formül görsel dışında. Bu sadece değişken bir isim. R değişkenleri adları, bir istisna dışında alfanümerik ve nokta (.) Ve alt çizgi (_) içerebilir. İşte gerçek kural:

" Sözdizimsel olarak geçerli bir ad, harflerden, sayılardan ve nokta veya alt çizgi karakterlerinden oluşur ve bir sayı veya onu takip etmeyen bir harfle başlar." .2way "gibi isimler geçerli değildir ve ayrılmış kelimeler de değildir. "

İkinci durum (yani is_spam ~ durumu ) farklıdır ve yukarıda açıklanmıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.