根据R中循环中的循环编号为数据帧生成变量名

时间:2012-07-24 19:37:45

标签: r loops dataframe

我正在使用lm()函数开发和优化线性模型,然后使用step()函数进行优化。我通过使用0和1的随机生成器(每次50%的几率)向我的数据框添加了一个变量。我使用此变量将数据帧子集化为训练集和验证集如果未将记录分配给训练集,则将其分配给验证集。通过使用这些子集,我能够估计模型的拟合程度(通过使用验证集中记录的预测函数并将它们与原始值进行比较)。我对优化模型的系数和预测结果与实际结果的分布之间的KS检验结果感兴趣。

我的所有代码都运行良好,但是当我想测试我的模型是否对我选择的子集敏感时,我遇到了一些问题。为此,我想创建一个for(i in 1:10)循环,每次使用不同的随机子集。这对我来说是一个非常大的挑战(我以前从未在R中使用for循环)。

这是问题(实际上有很多问题,但这里有其中一个):

我想为循环中的每个运行分别使用一个唯一名称的数据帧(例如:Run1,Run2,Run3)。我已经能够使用paste((“Run”,1:10,sep =“”)创建一个具有不同字符串的变量,但这只是给你一个字符串列表。如何使用这些字符串作为我的名字(子集化的数据帧?

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

感谢您帮助我。

2 个答案:

答案 0 :(得分:4)

不要在名称中创建带有数字的对象,然后使用get and paste和assign在循环中尝试访问它们。正确的方法是将元素存储在R列表对象中。

答案 1 :(得分: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个具有10个不同名称的数据框。

关于系数的第二个问题:

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