在R中创建涉及任意数量变量的公式

时间:2011-09-18 04:58:48

标签: r

我正在使用图书馆poLCA。要使用库的主命令,必须按如下方式创建公式:

f <- cbind(V1,V2,V3)~1

在此之后调用命令:

poLCA(f,data0,...)

V1,V2,V3是数据集data0中变量的名称。我正在运行模拟,我需要多次更改公式。有时它有3个变量,有时是4个,有时更多。

如果我尝试这样的话:

f <- cbind(get(names(data0)[1]),get(names(data0)[2]),get(names(data0)[3]))~1

它工作正常。但是我必须提前知道我将使用多少变量。我想定义一个任意向量

vars0 <- c(1,5,17,21)

然后按如下所示创建公式

f<- cbind(get(names(data0)[var0]))

不幸的是我收到了一个错误。我怀疑答案可能涉及某种形式的应用,但我仍然不太清楚这些功能是如何工作的。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

使用?poLCA这个(可能是hackish)成语中的例子中的数据似乎有效:

library(poLCA)
vec <- c(1,3,4)
M4 <- poLCA(do.call(cbind,values[,vec])~1,values,nclass = 1)

修改

正如哈德利在评论中指出的那样,我们使这比我们需要的要复杂一些。在这种情况下,values是数据框,而不是矩阵,因此:

M1 <- poLCA(values[,c(1,2,4)]~1,values,nclass = 1)

生成错误,但是:

M1 <- poLCA(as.matrix(values[,c(1,2,4)])~1,values,nclass = 1)

工作正常。因此,只要将其包装在as.matrix

中,您就可以对列进行子集化

答案 1 :(得分:2)

@DWin提到使用pasteas.formula构建公式。我以为我会告诉你使用election数据集会是什么样子。

library("poLCA")
data(election)

vec <- c(1,3,4)

f <- as.formula(paste("cbind(",paste(names(election)[vec],collapse=","),")~1",sep=""))