具有两个长度的矩阵,通过将[-1]通过粘贴传递给模型矩阵来消除一行

时间:2014-03-06 16:39:58

标签: r

我有以下表达式,我通过as.formula粘贴函数表达式(使用paste表示两个表达式)。 A是对象数据框

pastevar <- paste(c("z2 ~ ", paste(A, collapse=" + ")))
X <- model.matrix(as.formula(pastevar)) [,-1]

z2的长度比A的长度(199个元素)短一行(200个元素)。 A传递给第二个表达式,上面的粘贴表达式为

> A
[1] "Dxi2" "Dxu2" "Dxa2" "Dxb2" "Dxc2" "Dxd2"

有没有办法传递像A [-1,]这样的指令,通过在pastevar表达式或模型矩阵中传递来消除A中的第一行,因此X model.matrix的长度匹配。

当我使用下面的表达式时,我得到的维数不正确

pastevar <- paste(c("z2 ~ ", paste(A[-1,], collapse=" + ")))
Error en A[-1, ] : número incorreto de dimensiones

谢谢

1 个答案:

答案 0 :(得分:2)

R无法解析否定索引,而是告诉它从第二行开始并转到最后一行:

pastevar <- paste(c("z2 ~ ", paste(A[2:nrow(A),], collapse=" + ")))

编辑: 根据您的编辑添加数据本身,根据A:

的尺寸
pastevar <- paste(c("z2 ~ ", paste(A[2:length(A)], collapse=" + ")))

如果你想在最后切断x列:

A[1:(length(A)-x)]