[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