我的target是f.m方程中的sum(rho.m),t是变量,但计算时要用到Bound函数中相同t求得的m1和m2的值。
code如下:
rho.m<-vector(mode="numeric",length=n)#定义rho.m为vector
+
+ Bound <- function(t)
+ {
+ Noone <- 0
+ for(j in 1:n)
+ {
+ if(x[j]>=t) Noone <- Noone+1 #计数器
+ else next
+ }
+ Notwo <- n-Noone;p1<-Noone/n;p2<-Notwo/n
+ w1<- -p1/p2; w2<-1
+ m1<-k*2*w1/(abs(w1)+abs(w2))
+ m2<-k*2*w2/(abs(w1)+abs(w2))
+ list(m1=m1,m2=m2)
+ }
+
+ f.m <- function(t)
+ {
+ for(j in 1:n)
+ {
+ if (x[j]-t<= Bound(t)$m1)
+ {rho.m[j] <- Bound(t)$m1*(x[j]-t)-(Bound(t)$m1)^2/2}
+ else if(x[j]-t>=Bound(t)$m2)
+ {rho.m[j] <- Bound(t)$m2*(x[j]-t)-(Bound(t)$m2)^2/2}
+ else
+ {rho.m[j] <- (x[j]-t)^2/2}
+ }
+ sum(rho.m)
+ }
+
+ minifm<-nlminb(0,f.m,lower=-2,upper=2)
+ est.modified<-minifm$par
error在计数器的位置,Error in x[j] >= t :
comparison (5) is possible only for atomic and list types
但是t为变量,R计算的时候不是自动赋值的吗?