Hi,

The first problem (I think) is your for loop: for (i in sel), what is "sel"?! Then you might want to write "position[i]" and "trade[i]" (I don't think that position and trade are functions, or they are in a package you don't specify). Depending on the class of position and trade, you might need position[[i]] and trade[[i]]

I didn't really go further. The only problem I have is why only PosB? If I'm right, PosA shouldn't work either.

In any case, you have to find by yourself where exactly is the problem. You can run line by line by simulating the loop yourself (replacing i with 1, then with 2 and so on) to see if what happens at each place is really what you want. It might be a cheap solution, but it does really help me to make sure that it does what I need.

Once you've found the problem, and if you cannot resolve it, then contact the list, it will be much easier for anyone to help you if the problem is identified than sending a long code without even the sample data to test it.

HTH,
Ivan

Le 5/26/2010 09:17, arnaud Gaboury a écrit :
Dear group,

Here is my function:


#return the daily PL for day y

PLDaily<-function(x,y)


{

#find elements in my directory with "LSCPos" in the name, keep the numeric
part in the name and
#create a list
   l<-gsub("\\D","",dir()[grep("LSCPos",dir())])

#select in the list the desired elements
   assign("sel",l[which(l==x):which(l==y)],envir=.GlobalEnv)
   #here is another solution  select<-l[l %in% seq(x, y)]

#first we need to create the Pos and Trad elements

   for (i in sel)  {

   assign(paste("Pos",i,sep=""),position(i),envir=.GlobalEnv)
   assign(paste("Trad",i,sep=""),trade(i),envir=.GlobalEnv)

                    }
#access elements in my environment
   posA<-get(paste(c("Pos",x),collapse=""))
   posB<-get(paste(c("Pos",y),collapse=""))
   av<-get(paste(c("Trad",y),collapse=""))

#apply some change on element columns then create only one data frame with
the three elements
   allcon<-ddply(rbind(av[,1:3],
transform(posA,prix=POSITION*SETTLEMENT,SETTLEMENT=NULL),
           transform(posB, prix = -POSITION * SETTLEMENT, SETTLEMENT = NULL,
POSITION = POSITION * -1)),
           "DESCRIPTION",summarise,pl=sum(prix),quantity=sum(POSITION))

#remove the date in $DESCRPTION and add a new column $SHORTDESCRIPTION
   allcon$SHORTDESCRIPTION<-sub('
[a-z]{3}/[0-9]{2}','',allcon$DESCRIPTION,ignore.case=TRUE)

#read the contractvalue file
   value<-read.csv2("contractvalue.csv",sep=",",h=T,strip.white=T)

#merge "value" with "allcon", change some columns, then merge with PosB,
replace NA by zero and assign the final result to element PL
   zz<-merge(transform(merge(value,allcon,all.y=T),SHORTDESCRIPTION=NULL,
       VALUE=NULL,PL=-VALUE*pl,quantity=NULL),PosB,all.x=T,sort=F)
   zz[is.na(zz)]<-0
   #PL<-zz[c(1,3,4)]
   assign(paste("DailyPL",y,sep=""),zz[,c(1,3,4)],envir=.GlobalEnv)

}

Here is what I get :

PLDaily(100524,100525)
Error in as.data.frame(y) : object 'PosB' not found

ls()
[1] "PLDaily"    "Pos100524"  "Pos100525"  "position"   "sel"
"Trad100524" "Trad100525" "trade"

Why R can't find "PosB" ?

TY for your help.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


--
Ivan CALANDRA
PhD Student
University of Hamburg
Biozentrum Grindel und Zoologisches Museum
Abt. Säugetiere
Martin-Luther-King-Platz 3
D-20146 Hamburg, GERMANY
+49(0)40 42838 6231
ivan.calan...@uni-hamburg.de

**********
http://www.for771.uni-bonn.de
http://webapp5.rrz.uni-hamburg.de/mammals/eng/mitarbeiter.php

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to