【发布时间】:2016-01-31 08:30:22
【问题描述】:
我正在尝试在 R 中执行一个相当基本的操作,这给我带来了一些麻烦。
我有一个包含 100 次迭代的 for 循环,它在每次迭代中创建一个包含 7 个观察值的数据框。我想以某种方式将每次迭代的结果附加到上一次迭代的末尾。因此,在最后一次迭代之后,结果将是一个包含 700 个观测值的数据框。
for(k in 1:100){
X = runif(200,-3,3)
X2 = X^2
e.1 = rnorm(200,0,0.2^2)
y.1 = cos(X)^2 + e.1
fit.1 = lm(y.1 ~ X + X2)
X.val.1=-3:3
X.val.2=X.val.1^2
mat.k=data.frame(rep(0,7), rep(0,7), rep(0,7))
true_val.k=rep(0,7)
diff.k=rep(0,7)
names(mat.k)[1]=paste("fitted value")
names(mat.k)[2]=paste("lower bound")
names(mat.k)[3]=paste("upper bound")
for(i in 1:7){
mat.k[i,]=predict(fit.1,data.frame(X=X[i],X2=X2[i]),interval="confidence")
true_val.k[i]=cos(X[i])^2+rnorm(1,0,0.2^2)
diff.k[i]=true_val.k[i]-mat.k[i,1]
}
mat.full.k=data.frame(X.val.1,true_val.k,diff.k,mat.k,(true_val.1 < mat.k[,3] & true_val.k > mat.k[,2])*1)
names(mat.full.k)[1]=paste("X")
names(mat.full.k)[2]=paste("true value")
names(mat.full.k)[3]=paste("difference")
names(mat.full.k)[7]=paste("cover")
}
我最初认为我可以创建 100 个单独的数据帧(mat.full.1、mat.full.2、mat.full.3、...),然后使用另一个 for 循环将它们组合在一起,但 R 返回一个错误指出找不到对象“mat.full.1”。它唯一能找到的数据框是 mat.full.k。
我想返回一个如下所示的数据框,但包含 700 个观察值,而不仅仅是最后 7 个。
> mat.full.k
X true value difference fitted.value lower.bound upper.bound cover
1 -3 0.40681014 -0.04118873 0.4479989 0.3834096 0.5125881 1
2 -2 1.01834958 0.58296771 0.4353819 0.3649005 0.5058633 1
3 -1 0.98116822 0.54585026 0.4353180 0.3647855 0.5058504 1
4 0 0.12059332 -0.38227681 0.5028701 0.4241385 0.5816018 0
5 1 0.97424142 0.39806096 0.5761805 0.4505279 0.7018330 0
6 2 0.04907813 -0.43703754 0.4861157 0.4226798 0.5495515 0
7 3 0.41136178 -0.10964164 0.5210034 0.4399401 0.6020667 0
我搜索了几个论坛并尝试使用 list() 函数但没有运气。任何帮助将不胜感激。
谢谢!
迈克尔
【问题讨论】:
-
您需要考虑的一件事是,当您使用 k 作为迭代器从 1 循环到 100 时,“mat.k
-
您的代码产生错误:
Error in data.frame(X.val.1, true_val.k, diff.k, mat.k, (true_val.1 < : object 'true_val.1' not found
标签: r for-loop dataframe append