Ý nghĩa của các trò chơi. (Dấu chấm) trong R là gì?


39

Tôi chỉ đang đọc cuốn sách "R in a Nutshell". Và dường như tôi đã bỏ qua phần "." như trong "sample.formula" đã được giải thích.

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

Là mẫu một đối tượng với một công thức trường như trong các ngôn ngữ khác? Và nếu vậy, làm thế nào tôi có thể tìm ra, những lĩnh vực / chức năng khác mà đối tượng này có là gì? (Khai báo kiểu)

EDIT: Tôi vừa tìm thấy một cách sử dụng khó hiểu khác của ".":

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

(dấu chấm giữa ~.,)


Dấu chấm bạn nhìn thấy với is_spam ~. lệnh có nghĩa là không có biến giải thích. Thông thường với các công thức mô hình, bạn sẽ thấy y ~ x, nhưng nếu bạn không có biến x, y ~. nói để đoán giá trị của y không sử dụng biến nào khác. Điều này giống với mô hình y=β0
Christopher Aden

12
@Christopher Ngược lại, .trong công thức cho R sử dụng tất cả các biến trong khung dữ liệu spambase.training(ngoại trừ is_spam) làm công cụ dự đoán. Mô hình phù hợp với . y=β0y ~ 1
caracal

Tôi đã không kiểm tra nguồn trước. Cảm ơn bạn đã sửa chữa!
Christopher Aden

@caracal (+1) Wow tôi chỉ tự hỏi làm thế nào để làm điều này. Cảm ơn!
Thomas Levine

Câu trả lời:


30

Dấu chấm có thể được sử dụng như trong tên bình thường. Tuy nhiên, nó có giải thích đặc biệt bổ sung. Giả sử chúng ta có một đối tượng với lớp cụ thể:

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

Bây giờ tuyên bố myfunctionnhư là tiêu chuẩn chung theo cách sau:

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

Bây giờ khai báo hàm

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

Sau đó, dấu chấm có ý nghĩa đặc biệt. Đối với tất cả các đối tượng có lớp myclassgọi

 myfunction(a)

chức năng gọi thực tế myfunction.myclass:

 > myfunction(a)
  [1] 2

Điều này được sử dụng rộng rãi trong R, ví dụ phù hợp nhất là hàm summary. Mỗi lớp có summarychức năng riêng của nó , vì vậy khi bạn phù hợp với một số mô hình chẳng hạn (thường trả về đối tượng với lớp cụ thể), bạn cần phải gọi summaryvà nó sẽ gọi hàm tóm tắt thích hợp cho mô hình cụ thể đó.


Tôi rất ngạc nhiên câu trả lời này đã được chấp nhận và nâng cao rất nhiều, bởi vì nó không trả lời câu hỏi nào cả! Nó đề cập đến dấu chấm lửng ... (là một từ vựng đơn lẻ, không phải là một chuỗi gồm ba dấu chấm khác nhau) trong khi câu hỏi có nghĩa rõ ràng là một dấu chấm . như được sử dụng trong các công thức và tên theo một cách hoàn toàn khác, như được mô tả chính xác theo cách đương thời trả lời bởi Chase.
whuber

3
Vâng, tôi không đề cập đến dấu chấm lửng. Tôi đã cố gắng giải thích rằng dấu chấm được sử dụng cho công văn phương thức S3. Các hàm chung thường có dấu chấm lửng, đó là lý do tại sao tôi sử dụng chúng. Nếu chúng bị xóa khỏi mã, câu trả lời sẽ không thay đổi. Tôi chỉ có thể đoán rằng tôi đã đưa ra câu trả lời trước khi chỉnh sửa, vì bây giờ tôi sẽ đưa ra một câu trả lời khác sau khi đọc lại nội dung câu hỏi.
mpiktas

1
Cám ơn vì đã giải thích. Tôi nghĩ rằng sự xuất hiện của "..." hai lần khiến tôi lầm tưởng rằng bạn đang coi nó như một "dấu chấm".
whuber

12

Nhìn vào trang trợ giúp để biết ?formulavề .các bit có liên quan:

Có hai cách giải thích đặc biệt. trong một công thức. Thông thường là trong bối cảnh của một đối số dữ liệu của các hàm phù hợp mô hình và có nghĩa là 'tất cả các cột không theo cách khác trong công thức': xem terms.formula. Trong ngữ cảnh của update.formula, chỉ có nghĩa là 'những gì trước đây trong phần này của công thức'.

Ngoài ra, các gói reshapereshape2sử dụng ....một chút khác nhau (từ ?cast):

Có một vài biến đặc biệt: "..." đại diện cho tất cả các biến khác không được sử dụng trong công thức và "." không đại diện cho biến


5

Có một số trường hợp ngoại lệ (công văn phương thức S3), nhưng nói chung nó chỉ được sử dụng như là hỗ trợ mức độ dễ đọc và vì vậy không có ý nghĩa đặc biệt.


2
Tôi sẽ nói ngược lại - nó có ý nghĩa đặc biệt (công văn S3 mà bạn đề cập), nhưng một số quy ước đặt tên cũ đã khiến các tên hàm không phải là tướng S3 có tên bao gồm a .. Điều đó liên quan đến tên của các chức năng. Đối với tên của các đối tượng (không chức năng), thì có, không có ý nghĩa đặc biệt.
Phục hồi Monica - G. Simpson

Khi bắt đầu một tên, a .làm cho đối tượng vô hình ls()mặc dù.
caracal

2

Dấu chấm trong sample.formula không tách mẫu khỏi công thức , ngoại trừ trực quan. Nó chỉ là một tên biến. Tên biến R có thể bao gồm chữ và số và dấu chấm (.) Và dấu gạch dưới (_) với một ngoại lệ. Đây là quy tắc thực tế:

" Tên hợp lệ về mặt cú pháp bao gồm các chữ cái, số và dấu chấm hoặc dấu gạch dưới và bắt đầu bằng một chữ cái hoặc dấu chấm không được theo sau bởi một số. Các tên như" .2way "không hợp lệ và cũng không phải là các từ dành riêng. "

Trường hợp thứ hai (nghĩa là trường hợp is_spam ~. ) Khác nhau và được giải thích ở trên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.