[R] Functions ,Optim, & Dataframe
Dieter Menne
dieter.menne at menne-biomed.de
Mon Jul 31 08:30:29 CEST 2006
Michael Papenfus <mmpapenf <at> wisc.edu> writes:
>
> I have defined the following function:
>
> fr<-function(x) {
> u<-x[1]
> v<-x[2]
> sqrt(sum((plnorm(c(3,6),u,v)-c(.55,.85))^2))
> }
> which I then solve using optim
> y<-optim(c(1,1),fr)
>
> > y$par
> [1] 1.0029771 0.7610545
> This works fine.
>
> Now I want to use these two steps on a dataframe:
> mydat<-data.frame(d1=c(3,5),d2=c(6,10),p1=c(.55,.05),p2=c(.85,.35))
> > mydat
> d1 d2 p1 p2
> 1 3 6 0.55 0.85
> 2 5 10 0.05 0.35
>
> where for each row in mydat, I append the two parameter resulting from
> optim into mydat.
> I want to do this for a larger dataset but thought I would start with a
> simple two row dataframe.
>
I would prefer a loop in this case.
fr<-function(x) {
sqrt(sum((plnorm(c(3,6),x[1],x[2])-c(x[3],x[4]))^2))
}
y<-optim(c(1,2,0.55,0.85),fr)
mydat<-data.frame(d1=c(1,0.5),d2=c(1,0.1),p1=c(.55,.05),p2=c(.85,.35))
myres<-mydat # simple way to allocate dataframe for results
names(myres) = paste("res",names(myres),sep=".")
for (i in 1:nrow(mydat)){
y <- optim(mydat[i,1:4],fr)
myres[i,] <- y$par
}
mydat = cbind(mydat,myres)
More information about the R-help
mailing list