R:对字符串变量进行逐列循环

时间:2014-12-14 03:05:34

标签: r string loops systemfit

我的第一个R问题尚未在任何论坛中讨论过,显然......考虑我的假数据集:

A<-matrix(c(1,2,3,4,5,2,3,4,5,6,3,4,5,6,7),5,3)    
a<-c(2,4,6,8,9)

我想对a的每一列进行回归并执行systemfit来测试一些限制,例如:

system.1<-list(A[,1]~a,A[,2]~a,A[,3]~a)    
systemfit(system.1)

现在我的问题是我的真实&#34;矩阵A有数百列。我正在努力创建一个systemfit接受的列表。我提出了以下问题,而不是可行的代码:

varlist=NULL    
for (i in 1:3){varlist[i] <- paste("A[,",i,"] ~ a",sep="")}    
  models <- lapply(varlist, function(x){    
  systemfit(substitute(j, list(j = as.name(x))))    
})    

如果你点击

substitute(j, list(j = as.name(varlist)))

你可以看到解决方案

`A[,1] ~ a`

包含似乎导致systemfit麻烦的符号,因为它不被接受为公式。因此问题似乎是列式循环,但我没有看到任何替代手头的数据集...任何想法?

任何帮助都将受到高度赞赏!

谢谢!

1 个答案:

答案 0 :(得分:1)

执行此操作的惯用方法是创建一个引用数据框中列的公式列表,然后将列表和数据框传递给systemfit(...)

df    <- data.frame(a,A)  # data frame with columns a, X1, X2, X3, ...
forms <- lapply(paste0(colnames(df)[-1],"~a"),as.formula)
library(systemfit)
systemfit(forms,data=df)
# systemfit results 
# method: OLS 
#
# Coefficients:
# eq1_(Intercept)           eq1_a eq2_(Intercept)           eq2_a eq3_(Intercept)           eq3_a 
#       -0.182927        0.548780        0.817073        0.548780        1.817073        0.548780