2012-07-24 79 views
0

我正在开发和优化使用lm()函数和随后的step()函数进行优化的线性模型。我通过使用0和1的随机生成器(每个有50%的机会)向我的数据框添加了一个变量。我使用这个变量将数据框分成一个训练集和一个验证集。如果一个记录没有分配给训练集,它将被分配到验证集。通过使用这些子集,我可以估计模型的拟合程度(通过对验证集中的记录使用预测函数并将它们与原始值进行比较)。我对优化模型的系数以及预测和实际结果分布之间的KS检验结果感兴趣。根据循环中的循环编号生成数据框的变量名称R

我所有的代码工作正常,但是当我想测试我的模型是否对我选择的子集敏感时,我遇到了一些问题。要做到这一点,我想创建一个for(我在1:10)循环,每次使用不同的随机子集。这对我来说是一个很大的挑战(我以前从未在R中使用过for循环)。

这里的问题(当然实际上有很多问题,但这里是其中之一):

我想,这对于在一个独特的名字每次循环的运行独立dataframes(例如:RUN1, Run2,Run3)。我已经能够使用粘贴((“Run”,1:10,sep =“”)创建一个带有不同字符串的变量,但是这只是给你一个字符串列表。我如何使用这些字符串作为我的子集)的数据帧?

我期望遇到的另一个问题: 然后,我想使用每个运行的拟合系数,并将它们导出到Excel通过使用coef(函数),我已经能够检索系数,但是由于优化算法的原因,模型中包含的系数数量可能会发生变化,这几乎肯定会给我带来一些麻烦,将它们粘贴到同一个数据帧中,对此有何想法?

感谢您的帮助。

回答

2

关于第一个问题:

您可以为之前创建的字符串,用

df.names <- paste(("Run",1:10,sep="") 

然后,for循环创建并执行下列步骤,在数据帧你想要的名称:

for (i in 1:10){ 
    d.frame <- # create your data frame here 
    assign(df.name[i], d.frame) 
} 

现在您将以10个不同名称的数据框结束。

你对系数的第二个问题:

据我所知,这些不自然地适应您的数据帧结构。您应该考虑使用列表,因为它们允许使用不同的类 - 换句话说,对于每次运行,创建一个包含数据框和包含系数的数字向量的列表。

+0

一个更简单的替代方案甚至可以是在你的循环中创建名称,使用'assign(paste(“run”,i,sep =“”),d.frame)'。这样可以避免任何问题,如果您决定更改运行次数,但忘记随时随地更改号码。 – Edward 2012-07-24 19:58:03

+0

感谢您快速回复我 – 2012-07-24 20:11:44

+0

事实上,我设法同时解决了第一个问题和第二个问题(无需创建10个不同的数据框)。我所做的是将不同运行的系数导出到一个数据帧,然后将该数据帧合并到空数据帧中(如第一次运行),如下所示: – 2012-07-25 15:04:36

4

不要在其名称中创建包含数字的对象,然后尝试使用获取和粘贴并分配以后在循环中访问它们。正确的做法是将您的元素存储在R列表对象中。