2017-07-07 66 views
1

所有,我很新的R,并找不到适合我的确切问题的现有问题数据库中的任何内容。我正在运行几个回归循环(200),并试图将结果/系数绑定到一个数据框中,我可以使用一组标题将数据导出到Excel。每个回归中的所有变量都是相同的。我的循环的回归部分看起来像,使用主数据框来聚合回归循环使用rbind

getreg<-OutChg~USInput 
stepreg<-lm(getreg,data=mydata) 

我试图用一个“主”数据框绑定在一起的一切,比如,

master<-data.frame() 
master<-rbind(master,stepreg$coefficients) 

但我得到的回应Error in stepreg$coefficients : $ operator is invalid for atomic vectors。理想情况下,我想有一些地方我甚至不需要定义master<-data.frame()

任何意见是非常感谢。谢谢!

+0

这个错误很可能是由于'stepreg < - lm(getreg,data = mydata)'在调用'stepreg $ coefficients'时还没有运行,所以我建议首先检查(例如,如果我采用未分配的变量名称(例如'xyz')并调用'xyz $ coefficients',则会产生您的错误)。另外,如果您可以分享您的循环当前的样子,那么给您一个高效的解决方案会更容易。 – cmaher

回答

1

尝试使用getreg <- as.formula(OutChg ~ USInput)或只是把它放在lm()函数中。 如果您使用str(stepreg),您可能会发现它不是一个列表,而是一些其他数据类型(在这种情况下是一个原子向量)。 为了使用rbind()变“主人”有存在(的东西)

+0

凯文,谢谢你的回复。您的解决方案运行良好(使用as.formula)。然而,当我尝试用回归名称绑定列时,出现一个错误,表示'不能强制类型'list'的向量类型'closure'。我尝试使用的代码是 'y <-names(Regression1) stepreg <-lm(as.formula(OutChg〜USInput),data = newdata) sign <-cbind(stepreg $ coefficients,y )) mastersign <-rbind(mastersign,sign)' 有关如何将第三列的名称绑定到累积回归系数的数据框上的任何想法?再次感谢你! – JoeJackson1234

+0

@ JoeJackson1234'cbind()'没有做你想做的(我想)。它会创建两行(每个系数一个),然后为“y”添加一列。我总是发现检查这些变量是否有用,看它们是否包含我认为的**。 – Kevin

+0

凯文,这实际上是我想要它做的!Y变量标题的额外列。它不断地将'can not coerce type'closure'返回给'list'类型的向量,尽管...有任何想法吗? 再次感谢您的帮助! – JoeJackson1234

1

使用data.table

datandfit <- function(x) { 

    USInput <- rnorm(100, 0, 5) 
    OutChg <- USInput*5 + 10 + rnorm(100, 0, 5) 
    mydata <- data.table(USInput, OutChg) 
    stepreg <- lm(OutChg ~ USInput, data = mydata) 
    data.table(t(stepreg$coefficients)) 

} 

这会产生一些随机数据,拟合模型给它,并返回一个data.table的结果。因为您已经拥有数据,所以您会跳过该函数的前三行。然后,您可以在该函数上使用lapply,该函数将返回200 data.table s的列表,并使用rbindlist将它们全部合并为一个data.table

rbindlist(lapply(1:200, datandfit)) 

    (Intercept) USInput 
    1: 9.979968 4.909842 
    2: 10.086159 5.083225 
    3: 10.285307 4.873432 
    4: 10.457751 4.905266 
    5: 9.108176 5.005555 
---      
196: 10.715356 4.846002 
197: 9.938905 4.966180 
198: 9.968473 5.073163 
199: 10.098703 5.065169 
200: 9.538539 4.946085 
0

所有,我终于想通了!作为一名新用户和非程序员,弄清楚不同的R对象如何一起工作是很麻烦的,但是在执行任何“绑定”之前使用master-<-list()使它工作......花了我一两分钟意识到我无法每次都将循环指定为列表或删除以前的聚合......感谢所有人的帮助!