R:使用 model.matrix 时重命名

R: Renaming when using model.matrix

当运行以下R代码时:

y <- rnorm(100)  
B <- matrix(rnorm(200), ncol=2)  
colnames(B) <- c("x1", "x2")  
A <- model.matrix(y~B)  
colnames(A)  

model.matrix 将矩阵 A 中的前缀 "B" 添加到变量名称中。如何避免这种行为(或重命名它,但在非常一般的设置中,例如在具有用户的函数中提供的公式)?

我们可以使用 sub 删除列名中的第一个字符。

colnames(A)[-1] <- sub("^.", "", colnames(A)[-1])

或者通过与 'B'

中的列名连接来设置列名
colnames(A) <- c(colnames(A)[1], colnames(B))

不使用 sub 的另一种选择是使用 'y' 和 'B' 矩阵创建 data.frame,然后使用 y ~.

A <- model.matrix(y~., data=data.frame(y, B))
colnames(A)
#[1] "(Intercept)" "x1"          "x2"