我正在学习 R 的 e1071 包来执行朴素贝叶斯分析。根据本教程,包的 naieveBayes 方法接受一个名为“公式”的输入——它说是“表单类的公式 ~ x1 + x2 + ..”
如何创建这样的公式?我有一个包含性别、工作和收入列的数据集,并希望对这些维度/因素中的每一个进行分析。我需要以某种方式将它们变成公式对象吗?(我对 R 很陌生,所以我不清楚 R 是否支持特定的数据类型,如公式)。
只需键入~ x1 + x2
将创建类的对象formula
。
查看?lm
基本思想的示例。特定领域的语言非常灵活,因此不同的模型以不同的方式使用它。
例如:
dat <- data.frame(x=runif(10), y=runif(10))
lm( y ~ x, data=dat)
f <- y ~ x
class(f)
lm( f, data=dat )
公式是通过使用~
函数创建的。它可以用作前缀运算符或中缀运算符:
form <- ~ atom
form <- atomA ~ atomB
is.function(`~`)
[1] TRUE
class(form[[2]])
#[1] "name"
is.language(form)
#[1] TRUE
is.language(form[[2]])
#[1] TRUE
就像函数一样,公式对象是通过环境创建的:
str(form)
#Class 'formula' length 3 atomA ~ atomB
# ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
不同的函数对使用哪种形式(前缀或中缀)有不同的假设。您可以使用列表索引按位置编号提取组件。第一个元素将始终是波浪号运算符。
form[[1]]
# returns: ~>
form[[2]]
# atomA
form[[3]]
# atomB
您可以使用 将公式降级为字符对象,也可以使用 将as.character
字符对象提升为公式as.formula
。该formula
函数不创建公式,而是一个通用函数,具有不同分类对象的特定行为,通常用于从回归对象中提取公式。
methods(formula)
#-----------
[1] formula.character*
[2] formula.data.frame*
[3] formula.default*
[4] formula.formula*
[5] formula.glm*
[6] formula.lm*
[7] formula.nls*
[8] formula.quantmod*
[9] formula.summary.formula.cross
您的方法(公式)结果将根据您当时加载的包而有所不同。[10] 公式.术语*