R中“。”(点)的含义是什么?


39

我只是在读《坚果中的R》这本书。好像我跳过了“。”部分。如“ sample.formula”中所述。

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

是否像其他语言一样使用字段公式对对象进行采样?如果是这样,我如何找出该对象还有哪些其他字段/功能?(类型声明)

编辑:我刚刚发现另一个令人困惑的使用“。”:

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

(〜。之间的点)


y=β0

12
.spambase.trainingis_spamy=β0y ~ 1

我没有事先检查来源。谢谢你的纠正!
克里斯托弗·亚丁

@caracal(+1)哇,我只是想知道如何做到这一点。谢谢!
托马斯·莱文

Answers:


30

该点可以用作常规名称。但是,它还有其他特殊解释。假设我们有一个具有特定类的对象:

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

现在myfunction通过以下方式声明为标准泛型:

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

现在声明函数

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

那么该点具有特殊含义。对于所有带有类myclass调用的对象

 myfunction(a)

实际上会调用函数myfunction.myclass

 > myfunction(a)
  [1] 2

这在R中广泛使用,最合适的例子是函数summary。每个类都有其自己的summary功能,因此,例如,当您适合某个模型(通常返回带有特定类的对象)时,您需要调用summary并将为该特定模型调用适当的摘要函数。


我很惊讶这个答案被接受并提出如此多的建议,因为它根本无法回答问题!它把省略号 ...(是单个词素,不是三个不同的词素的序列)称为“点”,而问题显然是指公式和名称中所用的 .以完全不同的方式表达,正如在同期正确地描述的那样。蔡斯回答。
ub

3
好吧,我没有提到省略号。我试图解释该点用于S3方法分派。泛型函数通常具有椭圆,这就是我使用它们的原因。如果将它们从代码中删除,答案将不会改变。我只能猜测我在编辑之前给出了答案,因为在重新阅读问题正文之后,我现在会给出不同的答案。
mpiktas 2015年

1
谢谢你的解释。我认为“ ...”的出现使我两次误以为您认为您将其称为“点”。
ub

12

看看帮助页面?formula关于.这里的相关位:

对的两种特殊解释。在公式中。通常的情况是在模型拟合函数的数据参数的上下文中,它的意思是“公式中没有其他所有列”:请参阅terms.formula。仅在update.formula的上下文中,它表示“公式的此部分之前的内容”。

另外,reshapereshape2软件包的使用.和和...有所不同(与?cast):

有几个特殊变量:“ ...”代表公式中未使用的所有其他变量,“。” 代表无变数


5

有一些例外(S3方法分派),但通常将其仅用作易读性,因此没有特殊含义。


2
我会说相反的意思-它具有特殊的含义(您提到的S3调度程序),但是一些旧的命名约定导致不是S3泛型的函数名称具有包含的名称.。这与功能名称有关。至于(非功能)对象的名称,那么是的,没有特殊含义。
恢复莫妮卡-G.辛普森

在名称的开头,a .使对象看不见ls()
caracal

2

sample.formula中的点不会从视觉上分离样品公式。它只是一个变量名。R变量名称可以由字母数字,点(。)和下划线(_)组成,但有一个例外。这是实际规则:

语法上有效的名称由字母,数字和点或下划线字符组成,并且以字母或点开头,后跟数字。例如“ .2way”的名称无效,保留字也不是。

第二种情况(即is_spam_。的情况)不同,已在上面进行了说明。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.