R中e1071软件包的“公式”数据类型是什么?

时间:2013-10-25 12:45:59

标签: r

我正在学习R的e1071软件包来执行朴素的贝叶斯分析。根据{{​​3}}教程,包的naieveBayes方法接受一个名为“formula”的输入 - 它表示“表单类的公式~x1 + x2 + ..”

如何制作这样的公式?我有一个包含性别,工作和收入列的数据集,并希望对每个维度/因素进行分析。我是否需要以某种方式将它们变成公式对象? (我对R很新,所以我不清楚R甚至支持像公式这样的特定数据类型。)

2 个答案:

答案 0 :(得分:1)

只需输入~ 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 )

答案 1 :(得分:0)

通过使用~函数创建公式。它可以用作前缀运算符或中缀运算符:

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] formula.terms *