You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于R语言中model.matrix与~操作符用法的技术问询

关于R中model.matrix与~操作符的疑问解答

先看你给出的示例代码及运行结果:
加载iris数据集并生成矩阵:

data("iris")
x = model.matrix(~Species +0, iris)
x

选取三个不同物种的行:

> iris[c(1,78, 143),]
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
78           6.7         3.0          5.0         1.7 versicolor
143          5.8         2.7          5.1         1.9  virginica

处理后对应行的结果:

> x[c(1,78,143),]
    Speciessetosa Speciesversicolor Speciesvirginica
1               1                 0                0
78              0                 1                0
143             0                 0                1

1. model.matrix的具体作用

model.matrix的核心功能就是把分类变量(因子)转换成哑变量矩阵,方便后续建模计算。

所谓哑变量,就是用0和1标记样本所属的分类:比如Species有setosa、versicolor、virginica三个类别,model.matrix会给每个类别单独生成一列,某行样本属于哪个类别,对应列就标1,其他列标0。

你代码里的+0是关键:默认情况下model.matrix会自动生成一列全1的截距项,同时去掉第一个分类(比如setosa),只生成后两个分类的哑变量。加了+0就会取消截距项,保留所有分类的哑变量列,所以你得到了3列的结果。

2. ~操作符的用法

~在R里是用来创建公式对象的,不止能在lm这类建模函数里用。

  • 在lm(Y ~ X1+X2)里,~分隔因变量(Y)和自变量(X1、X2);但公式也可以只有右侧部分,也就是~ X,这种情况下它只是用来描述需要处理的变量集合。
  • 单独运行~iris$Species时,你只是创建了一个公式对象,R会直接返回这个对象本身,不会做任何计算。只有把这个公式传给model.matrix这类能解析公式的函数时,才会触发变量转换的操作。

内容的提问来源于stack exchange,提问作者Pewter City

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:40:31