[R] writing function : can't find an object
Peter Ehlers
ehlers at ucalgary.ca
Wed May 26 09:38:53 CEST 2010
On 2010-05-26 1:17, arnaud Gaboury wrote:
> 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" ?
Quite possibly because R is case-sensitive.
You have defined 'posB' and you're looking for 'PosB'.
-Peter Ehlers
More information about the R-help
mailing list