Apa arti dari "." (Titik) dalam R?


39

Saya hanya membaca buku "R in a Nutshell". Dan sepertinya saya melewatkan bagian di mana "." seperti pada "sample.formula" dijelaskan.

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

Apakah sampel objek dengan rumus bidang seperti dalam bahasa lain? Dan jika demikian, bagaimana saya bisa mengetahuinya, bidang / fungsi apa yang dimiliki objek ini? (Ketikkan deklarasi)

EDIT: Saya baru saja menemukan penggunaan "." Yang membingungkan:

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

(titik di antara ~.,)


Titik yang Anda lihat dengan is_spam ~. perintah berarti bahwa tidak ada variabel penjelas. Biasanya dengan formula model, Anda akan melihat y ~ x, tetapi jika Anda tidak memiliki variabel x, y ~. mengatakan untuk menebak nilai y tanpa menggunakan variabel lain. Ini sama dengan modely=β0
Christopher Aden

12
@Christopher Sebaliknya, .dalam rumus memberitahu R untuk menggunakan semua variabel dalam kerangka data spambase.training(kecuali is_spam) sebagai prediktor. Model cocok dengan . y=β0y ~ 1
caracal

Saya tidak memeriksa sumber sebelumnya. Terima kasih atas koreksinya!
Christopher Aden

@caracal (+1) Wow saya hanya ingin tahu bagaimana melakukan ini. Terima kasih!
Thomas Levine

Jawaban:


30

Titik dapat digunakan seperti dalam nama normal. Namun memiliki interpretasi khusus tambahan. Misalkan kita memiliki objek dengan kelas tertentu:

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

Sekarang nyatakan myfunctionsebagai generik standar dengan cara berikut:

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

Sekarang nyatakan fungsinya

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

Maka titik memiliki makna khusus. Untuk semua objek dengan myclasspanggilan kelas

 myfunction(a)

akan benar-benar memanggil fungsi myfunction.myclass:

 > myfunction(a)
  [1] 2

Ini digunakan secara luas dalam R, contoh yang paling tepat adalah fungsi summary. Setiap kelas memiliki summaryfungsi sendiri , jadi ketika Anda mencocokkan beberapa model misalnya (yang biasanya mengembalikan objek dengan kelas tertentu), Anda perlu memanggil summarydan akan memanggil fungsi ringkasan yang sesuai untuk model tertentu.


Saya sangat terkejut jawaban ini diterima dan sangat dinaikkan, karena tidak menjawab pertanyaan sama sekali! Ini merujuk pada elipsis ... (yang merupakan leksem tunggal, bukan urutan tiga yang berbeda) sebagai "titik" sedangkan pertanyaannya jelas berarti titik yang . digunakan dalam rumus dan nama dengan cara yang sama sekali berbeda, sebagaimana dijelaskan dengan benar dalam zaman kontemporer. dijawab oleh Chase.
whuber

3
Yah saya tidak merujuk pada elipsis. Saya mencoba menjelaskan bahwa titik digunakan untuk pengiriman metode S3. Fungsi generik biasanya memiliki elips, itulah sebabnya saya menggunakannya. Jika mereka dihapus dari kode, jawabannya tidak akan berubah. Saya hanya bisa menebak bahwa saya memberikan jawaban sebelum diedit, karena saya akan memberikan jawaban yang berbeda sekarang setelah membaca ulang badan pertanyaan.
mpiktas

1
Terima kasih atas penjelasannya. Saya pikir penampilan "..." dua kali menyesatkan saya untuk percaya Anda menyebutnya sebagai "titik".
whuber

12

Lihat halaman bantuan ?formulaterkait dengan .Inilah bit yang relevan:

Ada dua interpretasi khusus. dalam sebuah formula. Yang biasa adalah dalam konteks argumen data fungsi pemasangan model dan berarti 'semua kolom tidak sebaliknya dalam rumus': lihat terms.formula. Dalam konteks update.formula, hanya, itu berarti 'apa yang sebelumnya ada di bagian formula ini'.

Atau, paket reshapedan reshape2menggunakan .dan ...sedikit berbeda (dari ?cast):

Ada beberapa variabel khusus: "..." mewakili semua variabel lain yang tidak digunakan dalam rumus dan "." mewakili tidak ada variabel


5

Ada beberapa pengecualian (pengiriman metode S3), tetapi umumnya hanya digunakan sebagai bantuan keterbacaan, dan karena itu tidak memiliki arti khusus.


2
Saya akan mengatakan sebaliknya - ini memiliki arti khusus (pengiriman S3 yang Anda sebutkan), tetapi beberapa konvensi penamaan lama menyebabkan nama fungsi yang bukan S3 generics memiliki nama yang menyertakan a .. Itu berkaitan dengan nama fungsi. Sedangkan untuk nama objek (tidak berfungsi), maka ya, tidak ada arti khusus.
Pasang kembali Monica - G. Simpson

Pada awal nama, a .membuat objek tidak terlihat ls()sekalipun.
caracal

2

Titik di sample.formula tidak memisahkan sampel dari rumus , selain secara visual. Itu hanya nama variabel. Nama variabel R dapat terdiri dari alfanumerik dan titik (.) Dan garis bawah (_) dengan satu pengecualian. Ini aturan sebenarnya:

" Nama yang valid secara sintaksis terdiri dari huruf, angka dan titik atau karakter garis bawah dan dimulai dengan huruf atau titik yang tidak diikuti oleh angka. Nama-nama seperti" .2way "tidak valid, dan tidak ada kata-kata yang dipesan. "

Kasus kedua (yaitu, kasus is_spam ~. ) Berbeda dan dijelaskan di atas.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.