【发布时间】:2013-12-11 08:47:31
【问题描述】:
对不起,也许我的问题的解决方案很简单,但我还是 R 新手,任何帮助 非常感谢!
我想创建一个数据框或矩阵,每个循环的输出都将存储在其中。 这是程序:
n<-c(10,8,7,5)
n_goal<-c(8,9,9,4)
w<-c(0.1,0.1,0.1,0.1)
matrix<-mat.or.vec(6,4)
FI<-function(n_t) {
(((n_goal[1]-n[1]+W[1]-f[1]+n_t[1])^2)+((n_goal[2]-n[2]+W[2]-f[2]+n_t[2]-n_t[1])^2)+
((n_goal[3]-n[3]+W[3]-f[3]+n_t[3]-n_t[2])^2)+((n_goal[4]-n[4]+W[4]-f[4]-n_t[3])^2))
}
for (i in 1:6) {
W<-c(n*w)
sf<-c(1,1,1,1)
f1<-W%*%sf
f<-c(f1,0,0,0)
out<-nlm(FI, n_t<-c(0,0,0), hessian=TRUE)
for (i in 1:3) {
if(out$estimate[i]<0)
out$estimate[i]=0
}
n<-c(n-W+f-c(out$estimate,0)+c(0,out$estimate))
matrix[i, ]<-n
print(n)
}
matrix
n 是我想在每个循环的矩阵中存储的输出,以便随后绘制一个图。
(每个 n 将是一个点,我希望有 6 个单独的点---六个 4 维向量)
问题在这里:我得到错误的矩阵:
> print(matrix)
[,1] [,2] [,3] [,4]
[1,] 0.000000 0 0.000000 0.000000
[2,] 0.000000 0 0.000000 0.000000
[3,] 8.000002 9 8.999999 3.999998
[4,] 0.000000 0 0.000000 0.000000
[5,] 0.000000 0 0.000000 0.000000
[6,] 0.000000 0 0.000000 0.000000
只有第三行的数字是正确的,其他的都是零,而 print(n) 似乎是正确的
[1] 8.0 9.0 8.5 4.5
[1] 8.00 9.00 8.95 4.05
[1] 8.000003 9.000000 8.999999 3.999998
[1] 8.000002 9.000000 8.999999 3.999998
[1] 8.000002 9.000000 8.999999 3.999998
[1] 8.000002 9.000000 8.999999 3.999998
其实我希望最新的矩阵和 print(n) 一样。
另外,我尝试创建一个数据框,但对我来说很难,因为输出是 向量而不是单个数字。
【问题讨论】: