“。”是什么意思。(点)在 R 中?

机器算法验证 r
2022-02-13 16:38:45

我只是在读《R in a Nutshell》一书。好像我跳过了“。”的部分。如在“sample.formula”中进行了解释。

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

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

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

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

(~., 之间的点)

4个回答

点可以用作普通名称。然而,它有额外的特殊解释。假设我们有一个具有特定类的对象:

 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 中被广泛使用,最合适的例子是 function summary每个类都有自己的summary功能,因此当您适合某个模型(通常返回具有特定类的对象)时,您需要调用summary它,它将为该特定模型调用适当的摘要函数。

查看?formula关于.以下相关位的帮助页面:

有两种特殊的解释。在一个公式中。通常的一个是在模型拟合函数的数据参数的上下文中,意思是“公式中没有的所有列”:参见 terms.formula。仅在 update.formula 的上下文中,它表示“以前在这部分公式中的内容”。

或者,reshapeandreshape2包使用.and...有点不同(从?cast):

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

有一些例外(S3 方法调度),但一般它只是用作易读性辅助,因此没有特殊含义。

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

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

第二种情况(即is_spam~.的情况)不同,上面已经解释过了。