[R] writing function : can't find an object
    arnaud Gaboury 
    arnaud.gaboury at gmail.com
       
    Wed May 26 09:17:34 CEST 2010
    
    
  
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.
    
    
More information about the R-help
mailing list