函数stats::model.matrix
可用于将输入数据帧转换为适合原始代数操作的矩阵,以求解回归方程等。例如:
set.seed(0)
df <- data.frame(a = rnorm(5), n = rnorm(5))
model.matrix(~., data = df)
产生
(Intercept) a n
1 1 1.2629543 -1.539950042
2 1 -0.3262334 -0.928567035
3 1 1.3297993 -0.294720447
4 1 1.2724293 -0.005767173
5 1 0.4146414 2.404653389
其中一个功能是它控制如何将截距添加到设计矩阵中。比较:model.matrix(~ 0 + ., data = df)
vs model.matrix(~ 1 + ., data = df)
现在,公式中的.
指定应包含df
的所有变量。当我希望传递空数据帧并因此仅创建截距时,这会导致问题,例如:
df <- data.frame(matrix(, nrow=5, ncol=0))
model.matrix(~ ., data = df)
导致:
Error in terms.formula(object, data = data) :
'.' in formula and no 'data' argument
有没有人知道如何解决这个问题,具体来说,除了使用model.matrix(~ 1, data = df)
之外,我希望产生.
给出的以下结果。
答案 0 :(得分:2)
你可以这样做:
model.matrix(as.formula(paste0("~", colnames(df), "+1", collapse="+")), data=df)
但是,我认为你最好使用if语句。我认为R中的公式比任何基础都更方便。