首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:字符串变量上的按列循环

R:字符串变量上的按列循环
EN

Stack Overflow用户
提问于 2014-12-14 03:05:34
回答 1查看 70关注 0票数 1

我的第一个R问题还没有在任何论坛上讨论过,apparently...Consider我的假数据集:

代码语言:javascript
复制
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的每一列进行回归,并执行系统适配以测试一些限制,例如:

代码语言:javascript
复制
system.1<-list(A[,1]~a,A[,2]~a,A[,3]~a)    
systemfit(system.1)

现在我的问题是,我的“真实”矩阵A有数百个列。我正在努力创建一个系统适合接受的列表。我提出了以下不可行的代码:

代码语言:javascript
复制
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))))    
})    

如果你撞到

代码语言:javascript
复制
substitute(j, list(j = as.name(varlist)))

你可以看到解决方案

代码语言:javascript
复制
`A[,1] ~ a`

包含符号,这似乎给系统适配带来了麻烦,因为它不被接受为一个公式。因此,问题似乎是按列循环,但我没有看到任何替代数据集在hand...Any的想法?

任何帮助都将不胜感激!

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-14 03:41:27

这样做的惯用方法是创建引用数据帧中列的公式列表,然后将列表和数据帧传递给systemfit(...)

代码语言:javascript
复制
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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27465931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档